Практически изпит на 29ти декември. Впечатления и решения.

index

След дълга борба още един изпит е в историята и като по някакво чудо аз успях да мина с 500/500. В следващите няколко реда ще се опитам да представя моите решения и логиката ми която стои зад тях.  Предупреждение – качвам същия код който съм писал на изпита и той е леко казано мазало, така че имайте едно на ум 🙂

Условията, тестовете в БГКодер и авторските решения може да свалите от тук:


Задача 1 – Triple Rotation of Digits

Основната ми идея тук е: Напълвам всяко число от входния string в List<> ( което сега като се замисля е напълно ненужно т.к. мога да работя с индексите на string ) и после присвоявам последните 3 числа в начална позиция на един StringBuilder и прикрепям останалите числа от stringa на последни позиции в StringBuilder – a. Също много важно е да се отбележи че прикрепвам всяко от първите 3 числа, само ако не е ‘0’ . И с това се справяме за всички числа с 3 или повече цифри. За двуцифрените просто разменяме 1-вата и 2-рата цифра и ги изписваме. Тук също е важно да се провери дали първата, цифра е 0-ла и ако е – не се изписва ( докато стигна до този извод ми трябваше 1 час 😀 ) . И на последно място, ако числото е само с 1-на цифра изписване само нея. Колко цифри има числото може да проверим спрямо входния string -> string.Length или спрямо List<> с List.Count.

Ето и моето решение: – Цък

Задача 2 – Quadronacci Rectangle

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

Ето решението: – Цък

Задача 3 – Poker

Идея ми тук бе следната: Подадените карти си ги пълня в едни лист, и ако ми се падната – J,Q,K,A на тяхно място присвоявам -11,12,13,14 ( по лесно е да се търси зависимост м/у цели числа 🙂  ). После с един цикъл търся колко повторения има дадена карта – 2,3,4 или 5 , а с друг търся дали има straight ( тук е хубаво да се отбележи, че трябва да се обхване и специалния случай, когато имаме – А, 2, 3, 4, 5 ) и след това с едно кило If условни оператори изкарваме желания резултат.

Моето решение: – Цък

Задача 4 – UK flag

Доста елементарна задача на фона на другите. Лично походих, чрез разделянето на картинката на 3 част – горна, средна и долна и съответно принтирането им, чрез new string().

Ето и моя код: – Цък

Задача 5 – Angry Bits

Най-трудната от всички задачи. Лични походих към нея така: преобразувам подадените 8 числа в двойчна бройна система и ги подреждам в двумерен масив с размери 16 колони и 8 реда. След това почвам да обхождам, частта на масива в която се съдържат гаргите ( от 8 до 15 колона ) по колони ( това е много важно т.к. ако се обхожда по редове резултата е грешен! ) от дясно на ляво. Когато среща птица започвам да я местя с един безкраен цикъл, като преди това си записвам позицията на която е била птицата за да мога после да се върна на нея и да продължа търсенето на птици. Местенето го реализирам, чрез две променливи който непрекъснато добавям към координатите и ако срещна горен ред променям дадената променлива за местене по редовен. Когато срещна прасе проверявам дали на полетата около него има други прасета и ако има ги прибавям към броя на убитите прасета ( създал съм такава пролива ). Тук трябва да отбележим, че проверката може да се осъществи само ако прасето е в интервала от първия до шестия ред на матрицата и на различна от нулевата колона. Също така трябва да съобразим, че ако прасето е на 7мата колона не трябва да проверяваме дали в ляво от него има прасета т.к. там може да има птици и това да наруши верността на резултата ни. И на последно място съхраняваме колко е дълга полета на една птици за целите на изчисляваме на резултата. Когато свършим с изчисляването на резултата, проверяваме дясната страна за останали прасета и ако има това означава, че сме загубили.
Накрая извеждаме на конзолата резултата последван от това да ли сме спечелили или не ( “Yes”, “No” )

Ето и крайния резултат: – Цък

Като заключение бих казал, че изпита бе трудничък, но не и нерешим. Просто трябваше да четем условията си внимателно и да мислим трезво и спокойно 🙂

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s