Задача Rage Quit от Programming Fundamentals Sample Exam I - October 2016
Понеже тази задача явно трябва да се реши с Regex, а аз чакам лекцията с Ивайло Кенов, защото изгледах и майския, и септемврийския курс за регекси, но определено имам нужда от много повече информация по темата, направо е необятно - нито lookbehind/..., нито positive/negative, мътна и кървава...Особено като съм online, много е трудно да събереш пъзела сам, само с четене от интернет,...
Това е решението ми без регекс: http://pastebin.com/40nLkK1N
Обаче дава само 10т. Има тестове, които гърмят за време /тестовете са поместени в C# Advanced Exam - 19 юли, но са нечетими за мен/, други не изчисляват правилно... Това char.IsDigit не работи, както очаквам...
Задачата е тази: https://judge.softuni.bg/Contests/Practice/Index/331#2
Моля някой да отдели време да обясни къде бъркам.
Много благодаря! Обясненият регекс е лесен за схващане, но не мога сама да стигна до него, особено за времето на изпита. От понеделник го почвам, или го разнищвам, или никаква София. Като под "разнищвам" разбирам да ми е забавно, като трябва да го използвам, а не да отхвърлям цели задачи, защото не мога да си отсея input-а. :)
Специално за изпита мисля, че задачите могат да се решат и само с обработка със стрингове. Тази мисля, че също може - започваш цикъл отначалото на входното изречение като проверяваш дали текущия символ може да се парсне към число(try catch). Ако не може продължаваш напред като добавяш символите дотук в един StringBuilder. Ако се парсва проверяваш дали следващият също не се парсва, защото числата може да са от 0 до 20 по условие. Ако се парсва, повтаряш натрупаните символи дотук толкова пъти колкото числото и ги добавяш в StringBuilder за резултат. Ако имаш интерес, кажи и ще опитам да я напиша така този следобед.
Относно ученето на изразите, то при повечето хора е така. Това което на мен ми помогна най-много е поредицата на този човек като това е първото видео от нея(общо са 5-6 мисля за основните неща): https://www.youtube.com/watch?v=7DG3kCDx53c
Ако си добре с английския го погледни.
Може ли да погледнеш решението ми. Това, което казваш, се опитах да направя, но с метода char.IsDigit и с речници, не със StringBuilder , само че тестовете гърмят. Въпросът е защо? Защо try Parse хваща парсване към int, а IsDigit - не? Значи, почвам да я решавам вчера, избирам какъв ще е алгоритъма - StringBuilder към момента ми е по-лесен от речниците, затова решавам - речници. И винаги съм готова да ги сменя, ако някой тест гръмне за памет. Но те гърмят за време, значи няма да ги оправя, ако сменя речника и листа със StringBuilder.Знам, че е най-добре с регекс, но засега ще е без него, знам, че нещо не правя както трябва с IsDigit, почвам да търся, попадам на възможно решение с try Parse и зациклям. Защото за char.IsDigit във варианта IsDigit Method(Char) - както е в моя случай https://msdn.microsoft.com/en-us/library/7f0ddtxh(v=vs.110).aspx
Return Value
Type: System.Boolean
true if c is a decimal digit; otherwise, false.
Така че, какво изпускам? Така или иначе после парсвам към int? Защо try Parse да парсва по-коректно?
Тръгвам да търся авторските тестове, които винаги са ми били краен УСПЕШЕН вариант. Не и този път. :) /Ти отварял ли си ги?/
Та така, описах ти основните моменти от моята логика, ако можеш по-набързо да видиш къде бъркам, че на всеки му е ценно времето.