Loading...
hristo2612 avatar hristo2612 1 Точки

C# Exam 26 April 2015 Morning

Здравейте,

аз съм от вечерната група, но ме заинтригува последната задача от сутрешната група и затова реших да я споделя:

05. Bits At Crossroad

https://gist.github.com/EBojilova/e52978c6d98723237bfb 

04. Не я погледнах подоробно, но ми се струва еднаква като логика, но в обратен ред на вечерната група и можете да погледнете решението ми в предишната тема C# Exam 26 April 2015 Evening.

Ще е добре и другихора да споделят решенията си :) Още не са публикуквали авторските решения и е добре хората, които са имали затруднения да погледнат няколко вида решения.

PS: Влезнах от друг компютър и не съм вияла, че акаунта е на синът ми  и затова излизам под името hristo2612 :)

Тагове:
1
Programming Basics 29/04/2015 12:16:32
pataroka avatar pataroka 319 Точки

Защо long, като по задание числото е 32-битово. Има си тип и литерал за тая работа - uint и респективно 1U.  Защо да пълним паметта с 64-битови числа, като ползваме само 32 бита от тях. А и времето за решение се увеличава умопомрачително :

Long

Памет: 8.69 MB
Време: 0.399 s

Uint

Памет: 8.34 MB
Време: 0.013 s

Не, че се заяждам, просто така ми се струва правилно... 

На друга задача може и да има значение...

2
29/04/2015 13:37:07
Filkolev avatar Filkolev 4482 Точки

Задачата може да се реши с int[] като единствено накрая при принтирането да се кастне към uint, понеже числата се представят еднакво в паметта, разликата идва единствено от интерпретацията.

3
EBojilova avatar EBojilova 330 Точки

Благодаря за коментара. Сетих, се впоследствие, че може с uint, тъй като много време ми даваше 75/100 точки с int(пробвах доста варианти, докато не се сетих, че е от типа, и че последния бит е за знака), но не съм я поправяла.

За кастването към uint накрая не се бях сетила и благодаря за коментара  на Filkolev.

0
29/04/2015 14:28:46
Innos avatar Innos 419 Точки

Честно казано имаше нещо, което лично мене много ме подразни на тази задача. Условието е подмавмащо, казва само че иска да изпечаташ integer репрезентацията на всеки ред, по тази логика (1<<31) или int.MinValue не е ли пак интеджер репрезентацията на число, задачата не казва че иска положителната репрезентация на int число само репрезентацията му в int. По въпроса, да uint е по правилно, но хората ползват long като искат да проверят дали int прелива, то взема че проработва и така го оставяме :D . Моите тестове не бяха толкова драматични също, то като цяло в джъджа тимовете варират до някъде.

Uint

Memory: 8.38 MB
Time: 0.011 s

Long

Memory: 8.32 MB
Time: 0.014 s

Ето моите решения: https://github.com/Innos/C-Basics-Exam-26-April-2015-Morning

0
29/04/2015 15:27:13
enevlogiev avatar enevlogiev 1168 Точки

Eто ти едно скалъпено решение. http://pastebin.com/ac5WAxFc

Възползвам се от факта, че масивите са референтен тип данни. Лоша практика е да се мутират данни, но ти показвам какво бих правил на изпит. Втората лоша практика е, че в метода GetNumber не ползвам StringBuilder.

2
EBojilova avatar EBojilova 330 Точки

И аз използвах референтия тип, който се променя в метода. 

Още не сме изучавали практиките, сега предстои, но иначе ми се струва, че прекалено много ще се уджължи задачата, а и в случая този масив няма да се използва другаде?

1
29/04/2015 15:55:49
Innos avatar Innos 419 Точки

Това е интересно, не бях забелязал че масивите мутират дори и функцията да не връща тях. Има ли някакъв начин да се избегне това?

1
EBojilova avatar EBojilova 330 Точки

Аз набързо съм прегледала книгата на Наков и там пише да се внимава когато се ползва референтен тип в метода, тъй като той се достъпва по адрес и авотматично се променя-  добре е обяснено в глава Методи. Но никъде не намерих дали може да не се променя масива в метода, но и съм чела малко под диагонал :)

0
Filkolev avatar Filkolev 4482 Точки

Може ли хората, които не са успели да хванат въпросните тестове на 5-та задача да споделят дали все пак са си тествали програмите с размер на таблицата 32?

При такива входни данни е много вероятно да се появи отрицателно число на изхода, което веднага би трябвало да ви накара да се замислите. Оттам нататък е не повече от 2 минути работа да се тества с друг тип данни и да се изкарат 100 точки.

Понякога има common-sense съображения като това да не връщаш нелогични отговори. Да, не е казано дали числата трябва да са задължително положителни, но ако сте достатъчно прилежни да проверите граничните случаи ще ви направи впечатление едно число като -2020929291. И ако не за друго поне за пробата ще решите да тествате с uint/long какво ще стане и то ще вземе да излезе. 

 

(Лирическо отлконение):

Гледайки резултатите, доста хора са я направили за 100 точки, повече, отколкото са тези със 75. Според мен повечето от тези 14 души с максимален резултат са започнали с масив от тип int и по някое време (някои сравнително бързо, други след около 2 часа блъскане на глави в стената) са се усетили и са сменили типа. Някои вероятно и по начало са се презастраховали с long.

Моето виждане е такова - ако има хора със 100 точки на дадена задача, а аз не съм от тях, редно е да си задам въпроса "защо?", да се замисля какво те са направили, което аз не съм, да видя защо моят подход не е най-добрият. Имахме случай наскоро на изпита по JavaScript Basics с грешни тестове (тестове, които не отговаряха на условието). И въпреки това имаше хора, които я решиха. Имаше две реакции - едни хора почнаха да се ядосват и да сипят обвинения, други се замислиха и видяха, че с един по-правилен подход може да се реши коректно задачата дори да има некоректни данни на входа. Втората група хора за мен са по-добрите програмисти, защото се учат от грешките (дори грешките да не са техни) и постоянно се стремят да правят нещата по-качествено и правилно. И в даден момент ще могат да решават задачи с доста премълчани условия, както обикновено при нас беше на изпитите по PHP Basics, курс, който отпада в този си вид от новата програма - това е целта, след няколко месеца да може да решавате проблеми без да ви е разписано от начало до край какво да очаквате.

1
30/04/2015 12:36:30
EBojilova avatar EBojilova 330 Точки

И съм съгласна и не съм съгласна. Дори и да прозвучи, че не е common-sense,  ще отговоря и приключвам темата.

В реалната работа в която и да е сфера, трябва да очакваш за подводни камъни, а не да чакаш да ти ги кажат наготово, ако претендираш да си добър професионалист, но според мен не е това случая с този изпит.

Говорим за ниво 0. Решила съм почти всички задачи 02, 04 и 05 от всички провели се до момента изпити и не съм намирала такова несъответствие, освен на две 04.задачи и съм информирала. 

Не може да не са равнопоставени групите(аз бях от вечерната и не съм пряко засегната). Ако бях се явила на изпита сигурно нямаше да ми стигне времето за 100 точки, а щях да бъда с 75(аз съм от тези, които след около 2 часа блъскане на глави в стената я реших). Не пробвах само типа. Разигравах и другите constrains, примерно ако новите пресечни точки са вече 1 и т.н. Типа го пробвах последен, като краен вариант, тъй като за мен и отрицателно число може да се разпечата на конзолата и защо да е грешно, пак си е integer.

За изпита по PHP Basics може и да е практика и хората да си очакват такива премълчани или подвеждащи условия, но не мисля, че това е практика за изпита по ниво 0.

 

-1
30/04/2015 15:42:22
Filkolev avatar Filkolev 4482 Точки

Имаш право, съгласен съм, че за приемния изпит трябва очакванията да са по-различни. Просто отбелязвам, че от всяка ситуация трябва да се извлича максимална полза - човек да израства и да се развива.

0
Innos avatar Innos 419 Точки

Логиката ти я виждам и я разбирам Fil, радвам се че и ти виждаш нашата. Най- хубавото е че има консенсус, грешките ги докладвах, имаше и 1 техническа грешка в единия пример. Със сигурност поуки могат да се извадят навсякъде, да решаваш и грешни задачи пак е ценен опит, но не e нещо за този изпит :) .

1
30/04/2015 19:34:37
petiahr avatar petiahr 31 Точки

Ето и моето решение. Малко дългичко, тромавичко, но това е от начинаещ. Няма методи, придържала съм се към изучавания материал в нулево ниво:

https://gist.github.com/petiahr/02ace58090e5d12384ed

Относно коректността на условието - ами аз след три часа блъскане бях все на 12 точки, защото не разбрах какво точно се има впредвид под crossroads и съответно броят на пресечените точки, които вадех беше грешен. За мен точките (0,0), (0,n-1), (n-1, 0) и (n-1,n-1) не са "crossroads" - през тях не минават два диагонала. Едва когато публикуваха нулевите тестове  и видях, че за авторите всички изходни точки са също crossroads, пипнах на 2-3 места кода и изкарах за 2 мин. 100 точки.

Това си е малко груба ситуация за една неточност в условието да се изгуби толкова време, но това е положението.

0
01/05/2015 06:38:28
Filkolev avatar Filkolev 4482 Точки

Първоначалните точки е казано, че са predefined crossroads, т.е. винаги се смятат, независимо къде са.

За подобни неща е хубаво да се питат квесторите в даден момент, когато нещата забуксуват. Т.е. ако подозираш, че нещо в условието може би не го разбираш правилно, хващаш квестор, обясняваш му какво правиш и той може да ти посочи къде е грешката в логиката ако счете, че става дума за такъв тип грешка (несхванато условие).

2
petiahr avatar petiahr 31 Точки

О...да..Не съм доогледала условието. Благодаря за акцента. Грешката е моя и тя съответно си рефлектира върху резултата ми :).

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.