Cypher Roulette
Здравейте,
На тази задача стигнах до 70/100.
Моля за помощ къде бъркам.
Ето кода:
http://pastebin.com/75xN3qeC
Благодаря предварително.
Здравейте,
На тази задача стигнах до 70/100.
Моля за помощ къде бъркам.
Ето кода:
http://pastebin.com/75xN3qeC
Благодаря предварително.
В тази задача действително има няколко "тънки" момента, и нулирането на текущият стринг след въвеждане на два последователни "spin" низа е само един от тях. Трябва да се отбележи и тази част от условието:
Note: the "spin" commands do not count towards the N count.
т.е. въвеждането на spin по никакъв начин не трябва да бъде обвързано с намаляване стойността на counter-a (в този случай, i). Сиреч, този сегмент:
if (inputText=="spin")
{
inputText = "";
i--;
...
}
трябва да бъде променен така, че да не се налага специфична проверка за низ "spin".
if (prevString == currString)
{
cypherString = string.Empty;
if (prevString != "spin")
inputRows--;
continue;
}
В това решение не проверявам за "spin", а за всеки друг вход, защото ако входният низ е "spin", то тогава ще трябва да се увериш, че този резултат не се прибавя към cypherString-a. Подходил съм с continue, защото по този начин отново се връщаш към въвеждането на нов низ, и ако предишният низ (при мен prevString, при теб buffer) е равен на текущият стринг (при мен currString, при теб inputText), то нулираме cypherString-a, за разлика от останалите случаи, не декрементираме броячът, а отново се връщаме към въвеждането на низ. Междувременно, трябва броячът да бъде декрементиран и когато въведеният низ (текущият) не е "spin":
if (currString != "spin")
inputRows--;
Тази проверка е отделна и независима от останалите. Ако въведеният низ е "spin", то стойността на булевата променлива трябва да бъде променена:
addBack = !addBack;
и стойността на текущият низ да бъде присвоена на предишния низ (защото все пак трябва да бъде отразено въвеждането на "spin"). Оттук насетне вероятно има и други варианти, но аз съм подходил с още едно връщане към въвеждането на низове (с continue).
Благодаря,
Утре на свежа глава ще пробвам да си оправя кода.
Въпреки много доброто и подборбно обяснение не се справям.
Може ли нещата в код?
Това е решението, и в него използвам while и една конструкция, която бегло наподобява FSM, но си струва да се отбележи, че някой от форумците беше решил задачата като теб (с for цикъл), като използва continue само на едно място в програмата. Въпреки това, според мен решението с while малко по-кратко. Успех!
виждам, че тук е най-разгорещена дискусията (ето тема с още 4 линка към тази задача: https://softuni.bg/forum/questions/details/15060 )
ето и моя примерен код: https://pastebin.com/ta1zkLUn
70/100 в системата. Обяснявам: за мен е безсмислено да се ползва while цикъл за тази задача, за това си ползвам for, като просто вадя 1 от i когато има въведено spin. Другото - ползвам булеви команди за това дали въртенето е съответно надясно или наляво, като се променя при всеки spin. Сравнявам си предната дума с новата въведена и ако са същите анулирам резултатния стринг и прескачам това въртене на цикъла. При всичко изпълнено от условията добавям съответно нова дума към стария стринг или стария стринг към новата дума (редове от 45 до 52). Откровено казано вече не знам какво повече иска задачата, а имам 3 или по-малко грешки според джъджа. Гледах и лекцията от съотвеното упражнение, но там не е решена. Ще съм много благодарен ако някой удари едно рамо по кода. Виждал съм решение, което прави 100/100 със while и switch, което не мисля, че се различава от моето, какво бъркам?
https://pastebin.com/78fzeKE9 ето гоооооо - е бутнах го малко ама 100/100
преместих проверката за спин отпред за да не се трие ако е въведен 2 поредни пъти и му пастнах проверката и в тази за еднаквите входове защото дори тогава си мени посоката
и понеже има елсе закоментирах дясната посока
като закуча така обикновенно трия всичко, препрочитам условието и си правя нова структура
не се бях замислял направо да махна едната булева, хитро попадение. наистина изкарва 100 от 100, мерси за удареното рамо!
стратегията с триенето и на мен ми е влизала в употреба не еднократно, особено като се оказва, че от написаното условие съм разбрал и разписал около 16% от задачата.
моля,
нали за това сме тука!
Благодаря, след редакция по твоя съвет направих кроекции:
http://pastebin.com/SZ0b642g - виж // !!!!!!!!!!!!!!!Edit after Help!!!!!!!!!!!!!
С примера който ми даде работи. А с judge не, пак 70/100.
Не съм го напрвил да работи с твоя пример. Нешо съм объркал.
Влоших нещата :(
40/100
http://pastebin.com/1AZ07nx7
Много време я мисля и не става...
Моля за помощ