[Exam]Java Fundamentals 04.10.2015
Та така, колеги. Кажете си мнението за изпита. Май се сбъдна това, което enevlogiev намекна в една тема, доста тежички задачи. Четвърта май е най-лесна противно на обичайната подредба - аз обаче на нея доста се запънах понеже реших да я правя ООП, направих си клас за дракони, които исках функционално да подредя, обаче се оказа че Java по default ползва hashMap при такъв подход, което ми прецакваше подребата. Вкарването в употреба пък на LinkedHashMap се оказа извън възможностите ми и след половин-един час изгубен в stackoverflow си ги хванах ръчно и си ги набих в един такъв мап, останалото беше лесно. Първа също не беше трудна, но едва след малко борба успях да открия правилен регекс, който да не хваща каквото не трябва в кавичките също взех 100. След като направих тези двете, погледнах какви са резултатите на втора и трета и след като не видях никой с каквито и да е точки на Счетоводната, се захванах с трета, за което по-скоро съжалявам. Нещо обаче не можах да измисля алгоритъма за обхождане, освен това изникна ситуация, поради която трябваше и да си тръгна по-рано, така че си останах с 2 задачи. Но с оглед на трудността честно казано съм доволен. На поправката когато Java ще е преди OOP ще се явя да си взема максимума и така :D
Първа - http://pastebin.com/EQw5gDMm
Четвърта - http://pastebin.com/8TwzrKC1
Причината на 2-ра да минават нулевите и никои други, е че всички състезателни тестове са комплексни. Проблемът най-вероятно е в смятането на заплатите и/или другаде. Има някакви варианти да се изкарат частични точки (30 с грешки в сметките или 60 с бавна имплементация), но като цяло е или 0, или 100.
Примерно, на ред 26 при деленето трябва да ползваш RoundingMode.UP. Друго в момента трудно ще видя, но не е само това. Общо взето трябва да се чете с лупа условието, защото всяко едно изречение носи важна информация как да се подходи.
Едит: Увеличението на заплатата трябва да го приложиш върху първоначалната сума, а не върху дневната. И това има значение...
И при мен минаха само нулевите. Но аз я решавам доста по различно и имам доста грешки. Общо взето правя клас Employee с полета заплата и работни дни. Тъпча ги в един LinkedList, за да мога да ползвам removeFirst(), когато уволнявам. Дните почват от 1 и в началото на цикъла минавам през листа и добавям на всеки работник по един ден. Съответно за повишение филтрирам и повишавам. Мисля, че заради removeFirst() ми гърмят времеви тестове, но бързах и това беше най-лесният вариант. При тебе не мога да схвана много много за какво става реч, но мисля че hired и fired трябва да са long.
Тестовете са такива, че ще мине и с int задачата. Проблемът е, че ако се разглеждат всички служители поотделно, получаваме много голяма колекция, която яде много време, за да се обходи (неколкократно за всяка команда). Ако вместо клас Employee се направи EmployeeGroup, който да пази и брой работници, ще е доста по-бързо. Съвсем малко се усложнява процедурата по уволняване при този вариант.