[Exam Problems] Advanced C# - Problem{20} - O, My Girl!
Здравейте, колеги,
Зациклих на задачката O, My Girl! от раздела Exam Problems Practice. Общо взето в нея трябва да се извлече информация, която е скрита в текст между двойки ключове (за по-детайлно обяснение - условието). Смятам, че или условието не е дадено коректно, или един от тестовете не е правилен. Изкарвам 80/100 и не мога да мина тест №3.
Тест №3 in:
FZaa
FFaBulFZia15FaagarFa165jj15FTTaiaFssa15895
END
Тест №3 out:
Bulgaria
От първия ред (FZaa) се извежда ключа. Според условието и първия ред ключовете започват с F, съдържат от 0 до безкрайност големи букви, след това от 0 до безкрайност малки букви и накрая завършват с а. Като Regex израз:
F[A-Z]*?[a-z]*?a
Този израз обаче хваща следната информация:
FFaBulFZia15FaagarFa165jj15FTTaiaFssa15895 или Bulagaria (понеже Fa си е съвсем валиден ключ според условието!)
Да предположим, че не е обяснено като хората в условието. Бихте ли ми казали как да направя pattern-a така, че да хваща FaagarFa вместо FaagarFa. Ето и малко код по задачата.
Специално за това не съм съгласен. Fa е напълно валиден ключ. "agar" е между 2 и 6 символа. Така де, разбирам какво имаш предвид - a се намира измежду a-z символите и затова трябва да се смята вътре в ключа, ако имаме ключове Faaaa и от сорта. Малко е двусмислено, макар че може и аз да съм невменяем де
Гарантирано на изпита няма да се сетя, че Faa е правилният ключ (освен ако съм се сблъсквал с подобно нещо преди това). Ако тръгна да мисля задачата като теб с {2, 6} quantifier, ще ми се размине. В случая аз обаче взимах всичко (.*?) и проверявах дали е между 2 и 6 символа (доста извратено ). Бъг в мисленето какво да правиш. Мерси за решението :)
И за мен Fa е валиден ключ. Просто авторът на задачата е искал да се използва *, но вместо 'zero or more times', е перифразирал описанието на 'indefinite length or no length'.
След това е написал няколко теста, пуснал ги е през авторското решение и е копирал аутпута в out.txt файовете. Най-вероятно не му е минало през акъла, че някой ще иска да използва *?. Има много такива задачи в софтуни, най-вече от първия випуск. Специално тази задача преди 1 година беше от примерен изпит по php.