Софтуерно Инженерство
Loading...
+ Нов въпрос
EBojilova avatar EBojilova 330 Точки

[OOP Exam] - 5 July 2015 Winter Is Coming

Прилагам решението ми от изпита, тъй като както винаги нямам търпение и ще се радвам да видя и вашите решения :)

В абсолютно суров вид е, не съм го оптимизирала след изпита.

https://github.com/EBojilova/CSharp-OOP-June-2015/tree/master/OOPexam/WinterIsComming/Skeleton%20-%20MySolution

На Mass Effect се бях уплашила от имплементирането на командите и почти се бях отписала. Тука почти всичко ни беше поднесено на готово :)

Тагове:
6
C# OOP Basics
mgulubov avatar mgulubov 74 Точки

Аз, след задачата със снежинката, от единия лаб, бях загубил надежда за нещо повече от 30-тина точки :).

Иначе, това е моето решение. Мисля, че се получи добре, пък ще видим :) - цък

3
EBojilova avatar EBojilova 330 Точки

Браво! На пръв поглед само видях, че на Cleave не си въвел Default energy cost, но това си е бял кахър :)

0
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

Изпитът беше лесен, ако изключим подвеждането в условието - това с избирането на target и подредбата по азбучен ред...
След като махнах всички излишни логики за избиране на мишена и ги наредих - candidateTargets.OrderByDЕSCENDING(t => t.Name);  Всички нулеви тестове ми излизат вярно... Чакам да го тествам в Judge, за да видя ще даде ли 100...

П.П. Моя грешка, пооправих малко глупавите си, детски грешки и изкарах 100... Разбира се, след изпита... :laugh
С тези таргети се обърках яко... И разбира се - нямах валидации...
Утре, като си приведа кода в човешки вид, ще си споделя решението и тук. laugh

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

1
21/07/2015 16:51:57
mgulubov avatar mgulubov 74 Точки

В нулевите тестове, не мисля, че имаше момент, в който да имаш няколко играча in range, с еднакви health показатели. Реално, правилната проверка трябва да е candidateTargets.OrderByDЕSCENDING(t => t.HealthPoints).ThenBy(x => x.Name);, като за Mage-а, вместо Descending, се ползва Ascending. Признавам си, че не съм го тествал без подредба по health, но се съмнявам, че са пропуснали да направят тест за това, при положение, че въпросните редове са дори bold-нати в условието :).

Btw, при първоначалния ми събмит на изпита, ми излизаха всички нулеви тестове, плюс само два от стандартните, така че тази задача не беше от тези, с много изчерпателни нулеви тестове :). Може би, това е била и целта, все пак.

2
Filkolev avatar Filkolev 4428 Точки

В задачата имаше да се направи наследяване, капсулация, абстракция и полиморфизъм, това е ООП-то. Според теб какво тестваше задачата, което не е ООП?

1
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

Да речем, че се изказах пресилено, защото бях афектиран smiley

0
LoKSET avatar LoKSET 160 Точки

Отидох с доста ниски очаквания - този месец нямах достатъчно време за учене и дори очаквах пълен провал, но задачата не ми се стори прекалено тежка и се понапънах да я направя, но нещо не ми се получи. Пак взех точки де. Гледам и двамата сте заменили UnitEffector-a - и аз го направих така първоначално, но после реших че е чийтване, понеже това че е sealed ме подлъга да го екстендвам с допълнителна команда, която прави ApplyEffect и го изтрих - грешка явно, oh well.

Не знам точно от какво губя точки - доста са ми подобни нещата, но чак като видя тестовете явно ще разбера. Дори за час-два се омотах понеже видях че като се опиташ да аднеш единица на заето място, въпреки че изкарва съобщение че там вече има такава все пак я създава и тя ми участва в битките (това бъг ли е или пропускам нещо?). Почнах да гледам как да пипам по енджина и да ги трия, нищо не измислих и времето свърши.

Наесен пак.

1
05/07/2015 20:40:40
EBojilova avatar EBojilova 330 Точки

62 точки не са никак зле, защо на есен пак ?

Ако искаш още сега да си провериш резултата сложи в main метода тези допълнителни редове. преди и след Start

 using (var writher = new StreamWriter(@"../../OUTPUT.txt", false))
            {
                Console.SetOut(writher);
                engine.Start();
            }

Копираш си изхода от файла OUTPUT и изхода от нулевите тестове и ги съпоставяш в https://www.diffchecker.com/diff

Отдолу натисни Find Difference!

0
05/07/2015 21:08:48
LoKSET avatar LoKSET 160 Точки

Нулевите тестове минават - това е проблема. А те 62 точки са ок горе-долу, ама като гледам че 40 човека имат 100 искам и аз хаха.

2
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

Нулевите тестове наистина не бяха изчерпателни... Даде ми 25 с верни 0-ли.

1
Adrian_Yordanov avatar Adrian_Yordanov 5 Точки

Поправка кога ще има?

1
pataroka avatar pataroka 319 Точки

Аз се оаках Big Time! И близо десет часа след изпита, и двайсетина препрочитания на условието, не мога да вдяна защо ми гърмят 8 теста. Ако някой би бил така любезен да ме осветли относно собствената ми неграмотност ще бъда много благодарен. OOPExamJuly5

0
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

При PickNextTargets, когато получаваш кандидат таргетите, валидирай candidatTargets - да не са null... Aз точно същата грешка имах и там изгърмях...

1
mgulubov avatar mgulubov 74 Точки

Имаше някакво условие, че ако кръвта на warriror-a е по-малка или равна на 50, към damage-a на Cleave се добавя warriror.Health * 2, или нещо такова. Мисля, че няма такава проверка при теб или просто аз съм недоскив :).

0
pataroka avatar pataroka 319 Точки

@mgulubov тая проверка я правя в гетъра на дамиджа на магията @DiyanTonchev92 мда май си прав щот тая проверка я правя само при уориъра да се е*а в кухата тиква... И най-вероятно ми гърмят тестове за АйсДжайънт и Мейдж без таргети с NullReferenceException

Edit: Греда и след чека пак дава 25 и гърми на останалите тестове... Ще се застрелям вече...

2
05/07/2015 23:06:31
LoKSET avatar LoKSET 160 Точки

Оф, проблемът се оказа точно такъв какъвто се надявах да не е - недоглеждане - забравил съм да вадя цената на стомпа от енергията на гиганта. points -= 38;

crying

2
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

И аз имах същата грешка, точно при гиганта...  Кой да се сети да си извади логиката в отделен метод... 

0
malkstor avatar malkstor 348 Точки

Ето го и моето решение, само последния тест не успях да покрия.

Тегавичко беше, даже в началотo се бях примирил, че ще се явявам пак, понеже CombatHandler-ите бяха tricky.

1
EBojilova avatar EBojilova 330 Точки

По мое мнение перфектно си се справил с наследяването. Само за хендлърите конструктора можеше да го изнесеш в абстактния, но иначе всичко е много чисто и добре подредено(до колкото съм компетентна :))

Според мен така, като си се справил, няма да е от особенно значение последния тест, но ще видим как ще процедират при оценяването.

Аз си бях отворила решението на Mass Effect и почти изцяло копирах от там. Дефакто прожектайлите си бяха нещо като хендлъри. Смяната на спелове в единия от хендлърите го напрвих с вътреше прайвит брояч(пак идеята я взех от броенето на пржектайлите в един от класовете на Mass Effect). Имахме голямо облекчение обаче, че не имплементирахме командите. Аз там се бях отплеснала и доста си помагах с други решения при 3 от командите. Това вероятно щеше да ми е bottle neck  ако имаше да правим и тях на нашия изпит.

1
06/07/2015 12:25:38
malkstor avatar malkstor 348 Точки

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

1
aanguelov avatar aanguelov 219 Точки

За мен задачата си беше точно на нивото, на което трябваше да бъде. Евала на Фил и Наско, че се бяха постарали да я напишат като хората и съответно да ни оценят максимално ефективно знанията по ООП. (За сравнение проверете условието на "Infestation" или "Farmers Creed" - гарантирам ви че ако бяха дали една от тези двете на изпита резултатите щяха да са плачевни).

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

Ето го и решението - https://github.com/aanguelov/OOP_ExamPreparation/tree/master/WinterIsComing

1
EBojilova avatar EBojilova 330 Точки

Страхотно си се справил!

Така са ни тренирали Фил и Наско, че пишем, почти еднакъв код. Вече на няколко колеги задачите напълно ни се припокриват. :)

Погледнах ти внимателно кода и единственото, което може да се направи малко по-добре според мен е при MageCombatHandler- двете допълнителни прпъртита Counter  и HasCast може да са прайвит, не нужно някой извън класа да ги достъпва(даже може директно да са филдове).

1
pataroka avatar pataroka 319 Точки

Така са ни тренирали Фил и Наско, че пишем, почти еднакъв код.

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

1
aanguelov avatar aanguelov 219 Точки

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

3
07/07/2015 09:37:47
WindWallk avatar WindWallk 95 Точки

На мен лично задачата много ми хареса.

Доста добре беше написана и след подготовка от моя страна над задачи като Mass Effect и Console Forum, където си имаше бая работи за писане и сумати команди за мъдрене, тази задача ми се стори като детска игра. Добре дошло ни беше на всички това, че нямаше кой знае какво extend-ване на engine-a и писане на команди, с което доста ни улесниха. С нещата които имахме да правим си става пределно ясно на какво ниво е човек и дали е усвоил материала до момента.

Иначе ето го и моето решение : Winter Is Coming

1
EBojilova avatar EBojilova 330 Точки

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

Гледам, че си решил задачата от първите, за колко време успя да я напишеш?

1
WindWallk avatar WindWallk 95 Точки

За около час и половина - два направих всичко без UnityEffector-a.

После си направих 20-тина мин почивка и след това ми трябваха още към 30-тина мин да дооправя и някои бъгчета които имах.

Малко след 3-тия час си бях тръгнал вече.

1
06/07/2015 22:39:39
EBojilova avatar EBojilova 330 Точки

Браво, аз винаги се мотая до края :) На всички изпити до сега.

Забравих нещо да спомена преди малко, тъй като много ми харесаха методите. Единствено МаgeCombatHendlera според мен е добре да не е обвързан с класа Mage. Смяната на спеловете може да стане с вътрешно булево поле или брояч.

1