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
biser.stoev avatar biser.stoev 57 Точки

Ето решението на 4та: http://pastebin.com/CJAZYHyz

Дава 100 точки, но аз на изпита нещо не успях да си принтирам резултата и следователно 0 точки, а вкъщи с пет секундна промяна на един ред - 100... Еми шанс. ще се видим на поправката :Д

3
Nick1R1 avatar Nick1R1 115 Точки

Видях как си го направил, точно това което ме интересуваше, супер лесно е било.. успех на поправката ! 

0
11/10/2015 18:18:24
Niki_Mihov avatar Niki_Mihov 19 Точки

Пичове , кога е поправката ? Благодаря предварително !

1
Nick1R1 avatar Nick1R1 115 Точки

След края на целия модул, ще има поправителна сесия, на всички изпити ще има поправки в рамките на седмица, две горе долу. :) Успех

1
djc_bg2015 avatar djc_bg2015 923 Точки

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

Благодаря предварително!

0
djc_bg2015 avatar djc_bg2015 923 Точки

Направо няма думи ...
Използвах мач на вместо колекция от мачове.... (90/100 -> 390/400)

Ужас frown

0
11/10/2015 19:54:09
IvelinTenev avatar IvelinTenev 51 Точки

Как се решава изискването за скоуп на променливите? До последно мислих че файлвам заради това? 

0
Kiril98 avatar Kiril98 66 Точки

За 2-ра задача ако някой може да помогне --> https://github.com/Kircata/Programming-Basics/blob/master/Bunnies.cs

Дава ми 90/100, защото гърми за памет на един тест. Може ли да ми кажете как да го съкратя, ако някой има идеи ?

 

1
kidroca avatar kidroca 117 Точки

Здравей,

Не ти гърми заради памет, а заради не достатъчно време, след като се оправи да не гърми за време, тогава вече ти гърми за памет. 

Проблема се получава главно заради 2 неща:

  1. var bunniesLocations = new List<int> { } - този лист дублира информация която вече имаш във char[,] bunnyLair = new char[rowCount, colCount]; за всеки заек във bunnyLair запазваш нови 2 индекса в bunniesLocations - а зайците растат бързо. Докато не се оттървах от този лист използваната паммет не падна под 20MB. 
  2. Имаш много try - catch болкове които допринасят за забавянето на програмата , виж колко лесно съм ги заменил като написах един метод от 3 - 4 реда IsWithinField

Ето как се получи кода ти след като го пооформих - виж как съм се оотървал от buniesLocation в mask[,] пазя само само новите места за този ход и след това ги слагам във главния char[,]

А ето го и моето решение от изпита, което е по - различно

2
11/10/2015 23:14:32
Kiril98 avatar Kiril98 66 Точки

Мерси много! Доста добро и интересно решение на задачата. 

1
IceElementor avatar IceElementor 9 Точки

http://pastebin.com/pbqr2r9P Като е написано много грозно :D

Като цяло уловката на задачата според мен е популяризацията на зайцитие. Ако се обхожда с 2 фор-а и когато намериш "B" да присвояваш в съседите "B"-та е леко кофти, защото трябва да знаеш на коя стъпка кой са зайците които да размножиш, затова при прочитането на входа за всяко "B" писах 1ци, а като обхождах попълвах със 2ки.. после с 3ки и така знам кои точно зайци да размножавам без да им знам позициите. Ама общо взето е това.. От първия път 100/100 лесна беше..

0
12/10/2015 01:50:53
biser.stoev avatar biser.stoev 57 Точки

За да не отварям нова тема ще питам тук.

Може ли някой да ми погледна първа задача и да ми каже какво пропускам?

Джъдж ми дава 80/100.

Код: http://pastebin.com/XaPdXcP9

0
11/10/2015 23:10:54
kidroca avatar kidroca 117 Точки

Във метода ти PrintLastElements напиши nums.Reverse(); под 129ти ред преди Console.WriteLine(...)

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

last {count} even/odd – returns the last {count} elements -> [1, 8, 2, 3] -> last 2 odd -> print [1, 3] (в случея и first 2 odd ще даде същия резултат)

при теб това връщаше [3, 1].


Бонус :) 

Вместо това:

static void Max(int[] arrayInts, string typeOfNumber)
{
	int oddOrEven = 0;

	if (typeOfNumber == "odd")
	{
	oddOrEven = 1;
	}
}

Можеш да напишеш направо това: static void Max(int[] arrayInts, int oddOrEven) и да подадеш 1 или 0


Намиране на Index of Min Max с по - малко код:

var oddEven = arr.Where(x => x % 2 == oddOrEven).ToArray();
int index = Array.LastIndexOf(arr, oddEven.Max());

Използва се LastIndexOf защото при еднакви стойности в условието се иска "най - дясната"

2
11/10/2015 23:55:55
biser.stoev avatar biser.stoev 57 Точки

Леле. мерси много! То по - логично от това няма накъде, но кой да се сети... и така е като не се четат условията като хората, затова и сигурно са поправките :Д

1
enevlogiev avatar enevlogiev 1168 Точки

Колеги,

в джъджа вече са качени всички тестове. Може да ги намерите като ресурс към първа задача.

8
S.Iliev avatar S.Iliev 47 Точки

За първи път да отида на изит с някакво самочувствие и да се изложа като кифладжия - Безценно!!! :)

 

Надявам се да има скоро и втора дата за изпита, ако ли не ще е в края на курса, нали така?

Задачата със зайците я почнах със суичове, въобще не се сетих са Try-Catch, добро решение.

1
naskoni avatar naskoni 68 Точки

Здравейте, колеги (отдавна не съм писал) :)

На мен не ми стигна времето, за да си донаглася оставащите точки. Изгубих 1 час заради син екран на настолния компютър, след който не ми възстанови кода. :( (На миналия изпит седях на съседния и след син екран ми го възстанови.)

Изпитът ми се стори по-труден от предишните, които пък са малко за добра тренировка. Видяхте ли от 400 човека колко са с 0 точки???

 

 

0
yanchev_i avatar yanchev_i 16 Точки

Ето моите 400/400 решения на задачите:

01.Array Manipulator

02.Radioactive Bunnies

03.Shmoogle Counter

04.Srabsko Unleashed

Съжалявам, че вчера загубих ужасно много време да се мъча със 2ра задача, в резултат на което струва ми се "прегрях" и загубих част от концентрацията, съответно при решаването на следващите задачи също правих доста глупави грешки и пропуски. Някои успях в крайна сметка да отстраня, други не...

0
13/10/2015 08:19:26
Windowmaker avatar Windowmaker 5 Точки

Като видях решенията на колегата yanchev_i, на трета и четвърта задача подходих по подобен начин и видях колко малко не ми достигна, за да взема 100 точки на всяка от тях. И на двете задачи имах проблем с принтирането на Output-а. На поправката надявам се да се представим по-добре. :)

0
RoYaL avatar RoYaL Trainer 6849 Точки

Много ми хареса изпита. Явих се, тъй като този предмет по "наше време" го нямаше и реших, че трябва да видя как е на такъв изпит.

Протече интересно изпита.

Фил в Inspiration Lab ни наплаши, че задачите са трудни и че само 3та и 4та са лесни и след бързата ми преценка реших да се захвана с 4та.

Подходих с Regex, който го написах директно във Visual Studio без да му мисля и се оказа грешка. В 9:27 вече имах submit на 4та задача, но за нещастие за 90 точки. 7ми тест гърми за Time Limit (код http://pastebin.com/mWknXYuS ). Реших, че може да е от джъджа. Пуснах задачата още 5 пъти. Все Time Limit. Пробвах да махна сортирането и вътрешния цикъл за събиране на името на мястото - нищо не се промени, освен че не взех точки, 7мият тест гърмеше за време, което ме наведе на сто процентова сигурност, че проблемът е в регекса. Зарязах задачата.

В 10:09 пуснах събмит на 3та задача. 80 точки. Погледнах класацията - супер много хора на 80 точки. Викам си, е сега няма бягане от тук. Замислих се за определени неща, питах един от асистентите - дали може да има статични/инстанционни полета, пропъртита и т.н. Той ми каза - "не е това проблема, спокойно" :D Спокоен аз, че не е това проблема почнах да мисля в друга насока. Помъчих се до 10:20 и се отказах.

Почнах 1ва. Пуснах 4 събмита с възможните изходи "Invalid index" и т.н. 0 точки. И тръгнах да решавам задачата. Първи събмит в 11:03 - 50 точки. Гърмят нулевите. Оправих набързо нещата в 11:09 - 100 точки от първа. За момента резултатът е 100 / 0 / 80 / 90.

И тук стана нитересното. Почнах втора задача. Видя ми се много проста, въпреки че Фил ни наплаши за нея. Решавах, решавах, смятах на хартия, гледах в уърда - бе, мамка му, аз явно не мисля като автора. Според моите изчисления не трябва да има толковам ного зайци още на 1вия нулев тест. И кода ми също не произвежда толкова много зайци. Викам си, майна му, пускам я в джъдж. Супер странно - 20 точки от някакви рандом тестове. Смених една проверка да е от горе в цикъла - долу - 30 точки, като тези два теста дето минаваха преди малко не минават, а минават други 3 :D Вече беше 12:40 и нямах никаква идея защо с автора мислим по различен начин за тия зайци.

Фил прези това време каза да си тестваме на 3та задача някакъв огромен код от някъде. Викам тя работата ясна, дай да направя това с пропъртитата, пък ще тествам после големия код. Направо на ниво колекция филтрирах всичко що не е пропърти и ... 100 точки :D Който ме излъга, че не ми е проблема в пропъртитата да си каже ! :P

Помъчих се още малко на зайците и ми светна защо ги множи така автора. Не е в зайците проблемът. Проблемът е, че за да се считаш за избягал, трябва да ИЗЛЕЗЕШ от матрицата, а не да си по бордъра, както аз го смятах ДВА ЧАСА И ПОЛОВИНА. В 14:00 пуснах събмит с проверка за извън бордъра и 90 точки. Викам тая работа с единия тест съм я виждал вече. Да взема да си оправя единия тест на 4та да не гърми за време, пък 2ра ако мине.

Пренаписах 4та. Махнах регекса. Сплитнах по "@". Ако името на човека не завършва на спейс, значи не е спазен патерна "име @ място". Останалата част след сплита (@ място брой цена) я напълних в един Стек. try {} catch(){} дали мога да int.Parse-на първите два pop-нати елемента (т.е. дали има брой и цена които не са залепени). Ако не мога - continue. Ако мога, изчезват от стека и остава името на мястото в стека. Join-вам стека и получавам името на мястото. От там нататък работата е ясна. Сто точки (код http://pastebin.com/NDXy3D6S)

Върнах се на зайците. Бях си изместил всички проверки дали си умрял или жив в началото на цикъла, което е ясно, че ако и свършат ходовете, няма как да прецениш какво се случва и трябва да е в края на цикъла, за да може в края на итерацията да го провериш. Явно е имало и такъв тест, който го проверява това или е някаква хипер случайност, че съм се набалбукал на такъв корнер кейс, но като преместих проверката долу и събмитнах даде 100 точки и там за общо 400.

Каква ми е преценката за изпита: Много добре преценени задачи, доста балансирани, с интересни явно тестове. Трябва да се чете и мисли това е истината. Близо 3 часа се мъча на задача, за която въобще не съобразявам, че трябва да излезеш от матрицата, което е логично, ама нейсе. Условията бяха много добре описани. Само към 3та ми е забележката. Например аз може и да се сетя, че има пропъртита методи и т.н. които се декларират по същия начин, защото най-малкото имам някакъв по-напреднал опит със C# различен от C# Basics && C# Advanced курс. Но хора, които не са минавали през нищо по-различно съм сигурен, че им е малко по-трудно да се усетят какво се има предвид под конвенции за именоване, рънтайм и компайл тайм константи (да си призная честно и аз даже не се сетих, че за едното се има предвид readonly полета). Така или иначе това са само 2 теста и е допустимо да оставиш на човек ако държи на тези два теста да потърси в интернет за съответните конвенции и възможности :)

Поздравления за справилите се! :)

9
Windowmaker avatar Windowmaker 5 Точки

На 4та задача с това сплитване ме поизмъчи мене. Най-вече заради двете имена, които сплитвам, като две отделни имена, а не като едно цяло. А ако трябваше да се сплитна по "@" мястото и броят на билетите ми ги изкарваше залепени. С регекс е по-лесно май при тази задача.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Ако имаш "x@y 20 30" и сплитнеш по "@", хиксът който ще е [0] няма да завършва на спейс и не е валидно.

Ако имаш "x @ y z r2030" и сплитнеш по "@", хиксът, който ще е [0] ще завършва на спейс, но [1]-цата като я сплитнеш по спейс, последните два няма да могат да се парснат към инт.

Ако имаш "x a @ y z r 20 30" и сплитнеш по "@" всичко ще е наред [0]-та завършва на спейс. [1]-цата я сплитнаш по спейс, 20 и 30 се парсват към инт. В масива остават "y", "z", "r". Който просто ги джойнваш и са името на събитието.

2
KatyaMarincheva avatar KatyaMarincheva 572 Точки

На четвърта с регекс наистина става лесно:

string pattern = @"(([a-zA-Z\s*]+)\s+(@[a-zA-Z\s*]+)\s+(\d+)\s+(\d+))";

http://pastebin.com/6mA3ZN1e

2
Bogdan1899 avatar Bogdan1899 50 Точки

А някой знае ли защо в класирането в judge - а не са записани точките на всички участници (аз имам едни скромни 50 точки на 4-та задача, но ми пише че имам 0, но да кажем на royal му пише също 0 точки, макар да е решил вс задачи). А и като цяло май не всички явили се са написани в класирането. Не че е чак толкова важно, просто ми е интересно.

0
enevlogiev avatar enevlogiev 1168 Точки

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

3
Bogdan1899 avatar Bogdan1899 50 Точки

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

0
Bogdan1899 avatar Bogdan1899 50 Точки

Прав беше. Намерих вече реалното класиране :)

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