Loading...

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

Nick1R1 avatar Nick1R1 115 Точки

C# Advanced Exam 11.10.2015

 Здравейте, пускам тема да коментираме изпита, аз успях да реша 3та задача само. Регекса на Shmoogle Counter го направих да е 

"(double)\s([a-z]\w*)|(int)\s([a-z]\w*)" и дава сто точки, бях зациклил яко на 80, защото не бях обърнал внимание, че в условите пише, че се спазват конвенциите, но после се усетих и го напвравих да хваща първата буква само когато е малка и джъджа излезна щедър. След това бях сигурен, че ще реша и 4та задача, опитах се да напълня два вложени речника,(същата схема като Population Counter от предишния изпит, обаче там няма повтаряши се ключове във вложения речник :(  ) пробвах с листове със стрингове и с какво ли не, но не стана и не стана, защото ми излиза, че се повтаря втория key във вложения речник и така и не успях да я прескоча тази стъпка, много ме е яд, че не успях да я реша, направо се изнервих. Моля който я е решил да сподели решението, ако може и да е без класове, ще е още по-добре. Общо взето изпита си беше тежък.

Тагове:
2
C# Advanced 11/10/2015 18:21:22
Filkolev avatar Filkolev 4482 Точки

Аз задачите ги решавах между 12 и 3 сутринта в петък, съответно не бих показал решенията си на никого :)

Това, което казах в началото, беше, че 1-ва и 2-ра са дълги, не знам защо RoYaL им се е наплашил. Но според мен действително беше правилна тактика да се започне с последните две, понеже там бързо можеха да се хванат точки. Докато на 1-ва и 2-ра като нищо след половин-един час можеше и да не се хванат точки.

1-ва - нищо сложно, просто доста дълга, около 200 реда, освен ако не се ползват усилено методи от LINQ. Тук мисля, че ще имаме състезание кой на изпита написа най-дълъг switch, аз поне видях няколко, но рекордът беше около 160 реда. Колеги, вярно, че сте на изпит, но не е особено сложно да дадете refactor -> extract method. Когато кодът е разпарчетосан е по-лесен за поддръжка, а в дълга задача това е още по-важно.

Аз на 1-ва доста се обърках на моменти. Бях тръгнал да търся най-малкия/големия елемент на четна позиция, вместо да гледам дали самият елемент е четно или нечетно число и други подобни недоразумения. И с такива глупости загубих доста време и подозирах, че няма да съм единствен (и не бях).

2-ра задача е комбинация от Labyrinth Dash и Game of Life (давана на приемен изпит). Тук решението ми е особено грозно. Основната трудност е, че трябва да се репликират зайчетата така, че да не се получат ненужни такива, т.е. трябва да се пазят две матрици, една за предишното състояние, която се обхожда, за да се търсят зайците, и другата е новото състояние след репликирането. Има няколко случая - 1) играчът да излезе; 2) играчът да попадне на зайче; 3) зайче да попадне върху играча. Ако предварително се очертаят тези сценарии задачата не е сложна.

3-та - много си бих главата с нея и въпросните тест 2 и 5. Отказвах да сложа регекса ми да започва с малка буква, понеже си бях втълпил, че може да има static readonly променливи (който е учил ООП сигурно е наясно, че по конвенция те са с главна буква). Проверявах за фалшиви декларации в стрингови литерали. Проверявах за уникодски букви (понеже пишеше, че ще има букви, но не и че ще са латински). Тъкмо щях да пускам реален код да си тествам регекса, но вече не издържах физически и се предадох. Подозирах, че с добавките в условието ще има доста по-малко заблудили се хора, но грешах. Затова и подсказахме, че е добре да се ползва по-голям код при тестване. Задачата е леко проблематична заради пропъртитата - не се очаква, че хората, които не са учили ООП, ще знаят, че това нещо съществува и че може да ги дъни.

4-та - много лесна. Дори нямаше нужда от long, работеше си и с int-ове. Един вложен речник, сортиране с LINQ и това е. 15 минути.

Мисля, че изпитът в никакъв случай не беше по-труден от предходните. Бих го определил като по-лесен, защото задачите бяха познати.

1
tilchev92 avatar tilchev92 Trainer 128 Точки

"Познати задачи", за всеки е различно понятие :D . Изпита имаше доста уловки. Аз лично се изложих бая и мисля, че най-лоша шега ми изигра това, че изпита който решавахме на подготовката (предния - от 19 Юли) беше значително по-лесен от нашия (мисля, че не само аз мисля така). Това ме подведе да подходя малко по-лежерно към подготовката си. Но какво да се прави, за джавата вече ще си знам.

3
RoYaL avatar RoYaL Trainer 6849 Точки

Много често подготовките за изпит се правят преди де факто да са готови задачите за изпита. Няма как водещият подготовката да адаптира задачите за да са със същата сложност като и на изпита. А и не е правилно според мен. Най-важната част в обучението е самоподготовката :) И винаги да си готов за най-гадните задачи ever :P

2
tilchev92 avatar tilchev92 Trainer 128 Точки

Естествено, че няма как да се адаптира, но все пак е добре да се вземе като пример някой средно сложен изпит, защото този си беше направо много лесен. Примерно по-предния (от май месец). Но както и да е то и понятието "сложност" е относително за всеки. За самоподготовката съм съгласен.

Впрочем задачата за сръбското имах някакви пъклени подозрения, че ти си я писал :P :D

0
cap7ainjack avatar cap7ainjack 20 Точки

Здравейте! 

Някой все пак ще качи ли решение на първа с LINQ  вместо с For цикли. Интересно ми е да я видя, как се прави с LINQ. Иначе ми излезна и на мен около 200 реда  и взех 60 точки само.

0
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Аз не ползвам цикли, но правих решението набързо и си мисля, че може да стане и по-кратко.

http://pastebin.com/d3WhFLVC

1
cap7ainjack avatar cap7ainjack 20 Точки

Твоето явно съм пропуснал да го видя. Благодаря!

0
12/10/2015 15:30:58
tilchev92 avatar tilchev92 Trainer 128 Точки

Аз започнах с 3та и 4та задачи, но ми се видяха леко завъртяни отначало и се върнах на 1ва, мислейки, че въпреки, че е повече писане няма да има кой знае какви особености. Начатках нещо за нея и събмитнах.. ужас само 30 точки. Едната ми грешка беше - като на доста хора, че не ревърсвам елементите от "last X odd/even". За жалост се усетих за това чак след изпита, защото когато подсказваха за грешката се бях вглъбил във втора задача. Вкъщи го дооправих това и стигнах 50 точки, така че явно имам още проблеми.

След 1ва иначе хванах 3та. На 3та скалъпих някакъв регекс - къде от стака, къде сам го правих и накрая стана "(double)(\s+\b(\w+)\b)" и същото с "int" втори път. Стройността се пада в 3та група. Хванах 80 точки и бях доволен за момента.

После хванах 4та - там измисли малко по-различен подход за входа. За извличането на изпълнителя направих фор цикъл от 1 до 3 (след като вече съм конкатенирал 1вата дума към стринг билдъра) и  ако срещнех дума която 1вия и символ е '@' брейквах. След това правих същото за заведението само че докато срещна digit. После проверявах дали изпълнителя почва с '@'. Цифрите са си останалите две неща и готово - останалото е ясно. Ето го кода http://pastebin.com/k83AQQvu. 90 точки от първия път - бях доволен. Този БигИнт го сложих с надеждата да хвана и останалите 10 но уви.

Накрая се мъчих с 2ра, но вече притеснен и от времето, не мислих много и директно пишех каквото дойде, следователно стана 200 реда код, който се чупеше все повече с всяка промяна :D и така и не взех точки за тази задача.

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

0
naskoni avatar naskoni 68 Точки

За четвърта задача не видях някой да е пробвал с моя подход, затова ще го напиша:

Първо сплитвах по '@', нулевата позиция ако не завършва на интервал - брейк, ако да - трим и имаме името. Втората група - сплит по интервал и ако дължината на масива е по-малка от 3 - брейк, ако не е - последните два елемента ги вадим с Length - 1 и - 2 -> парсваме ги към инт и т.н. Името на събитието го сглобявах с интервал, ако елементите на масива са 4 или 5. Нататък предполагам е като на всички - с речници и сортиране на вложените такива. 90 точки изкарах и минах към следващата, накрая не стигна време да се връщам.

0
djc_bg2015 avatar djc_bg2015 923 Точки

Сплита на 4та го направийх с регекс (без Regex.Split :D ):

var match = Regex.Match(command, @"(.*?) (@.*?) (\d\d?\d?) (\d\d?\d?\d?\d?\d?)");
                    
string singer = match.Groups[1].ToString();
string venue = match.Groups[2].ToString();
int price = int.Parse(match.Groups[3].ToString());
int ticketsCount = int.Parse(match.Groups[4].ToString());

.. да ме пита човек , защо хващам и @ в групата :D

0
12/10/2015 20:17:56
Filkolev avatar Filkolev 4482 Точки

@djc_bg2015

Това е верният регекс. Може само да го опростиш малко като вместо \d\d... ползваш \d+ на двете места.

Друга препоръка, след като ползваш един и същи патърн многократно, по-добре да ползваш инстанционния овърлоуд на Match метода вместо статичния, т.е. направи си един обект тип Regex с този патърн и мачвай с него.

1
12/10/2015 20:24:40
petkov75 avatar petkov75 0 Точки

И аз се оплесках много на 4 та реших да я направя без регеха .Първо сплитах реда после намирам  ключовото '@' така намирам наляво името на дясно мястото  .На правих вариации на името с 1-3 позиция и мястото 1-3 позиции а накрая последните две за сумите .Като прочетох изрично че няма нищо допълнително от спейс за валидност на имената .Обаче забих на 70 точки  , направих различни проверки за не валидност но уви.На три теста гърмя  .Без регеха не става тази задача .Просто не ми остана много време да по науча регеха добре .За поправката се надявам да съм на ти с него . :)

0
Sideroff avatar Sideroff 22 Точки

Здравейте,

Бях на изпита и на 2ра задача забелязах нещо, което тогава ми направи впечатление, че не би трябвало да се случва, но реших да го разгледам вкъщи. Въпроса ми е дали има някаква причина, поради която като попълвам даден елемент от List<char[]> се попълва автоматично и друг такъв. Това което имам предвид може да се види на 100-104 ред Тук. Това което се случва там е следното: проверява дали в array съответния елемент е 'B' и ако е така прави околните 'B' в list. Въпроса ми е защо след като казвам само на list[x][y] да стане 'B' това се случва и с array?

0
Filkolev avatar Filkolev 4482 Точки

Защото array и list са колекции от масиви. На редове 18-20 добавяш един и същи масив и в двете колекции. Масивите са референтен тип, т.е. и на двете места добавяш един и същи обект. Променяйки обекта впоследствие, няма значение дали ще го достъпиш през array или list променливата.

2
Kosta.Kanev avatar Kosta.Kanev 27 Точки

Здравейте, понеже не съм получил мейл дали съм взел изпита, нито пък имам оценка в профила ... това означава ли, че не съм го взел.

Поздрави :)

0
naskoni avatar naskoni 68 Точки

за изтриване

-1
14/10/2015 18:47:55
naskoni avatar naskoni 68 Точки

Търпение е нужно тука да приложим... wink

Много пъти е питано за оценка и сертификати след изпита, и отговорът е - ще ги има до 1-2 седмици.

 

1
Kosta.Kanev avatar Kosta.Kanev 27 Точки

Това ми е вторият изпит и понеже на първият получих резултат още на следващия ден затова питам. Вече ще знам. Благодаря за отговора ;) 

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