Loading...
Dokka avatar Dokka 1 Точки

[Programming Fundamentals] Dictionaries Exercise - 10.Сръбско Unleashed

Здравейте колеги,

тази задача малко ме поизмъчи. Джъджа ми дава 70/100. Първо ми гърмяха 3те проверки(4та, 5та и 7ма), после вкарах long.TryParse като проверка и вместо да ми гърмят почна да ми дава грешен резултат. Прочетох си още няколко пъти условието на задачата и видях, че не бях вкарал проверка за това, че певеца/певацицата и мястото на концерта могат да бъдат с от една до три думи - съответно сложих и такива проверки. Но пак ми дава 70 точки. Ще съм много благодарен ако някои може да съдейства, като ми е достатъчно само примерен вход, при който се получава грешката.

Ето кода: https://pastebin.com/y1Qxx8Wn

EDIT: видях, че правя една и съща проверка 2 пъти като проверявам мястото и билетите да са >= 3, но това не оказва влияние като цяло.

0
Fundamentals Module 19/10/2017 11:50:12
Pazzo avatar Pazzo 158 Точки

При тая задача проверките на входа са два пъти повече от останалата част от решението....

Аз съм я решил със следните проверки (след като сплитнеш входния ред по спейс):

проверка дали input.length е поне 4 елемента;

проверка, дали в началото на някой от елементите има '@';

според това къде си намерил '@' дотам ти е artist name - след като го сглобиш го проверяваш колко е дълго (макс. позволена дължина е според условието);

от '@' нататък си сглобяваш venue name  и пак правиш такава проверка както горе на artist name;

парсваш си цената и броя на билетите - ако нещо там не се случи както трябва - входа е невалиден;

 

и оттам нататък имаш още десетина реда на вкарване в речници и принтиране от речници, което според мен е по-лесната част, в сравнение с горната...

опитай да решиш с тези насоки, ако искаш готово решение ->> тук, но моят съвет е да си поблъскаш главата сам (аз се мъчих 2 дни с тая задача конкретно. След втория ден я пренаписах от нулата и тоя път се получи). Освен това тук във форум доста е обсъждана, има много хинтове, които можеш да използваш.

1
19/10/2017 12:26:52
Dokka avatar Dokka 1 Точки

Мерси много за отговора, разгледах ти кода и на пръв поглед всичко ми изглеждаше почти същото като проверки, така тук да акцентирам на ПОЧТИ :D.

 - Няколко часа отделих на определяне на "venue", като пробвах всякакви комбинации в твоя и моя код :)  Като "venue" - може да има неща от сорта на "Belgrade @12" , "Belgr@de 12"  и тн. (при вход "ceca @Belgrade @12 11 11" , "ceca @Belgr@de 12 11 11") - това е валиден изход или поне не проверяват за него. В твоя код от ред 79 до 91 правиш проверка за това, но тя никога не се изпълнява, така и не разбрах защо - пробвах и през дебъгера.

- Моята фундаментална грешка e, че първо проверявам дали има някъде '@' във входа и сплитвам по него и след това сплитвам по "space". А то трябва да се провери дали имам елемент, който да започва с '@' при първи сплит по "space".

- Другото е, че изпълнителя също може да започва с '@', което трябва да се включи в името и да търси "venue" по '@' на следващ елемент.

- Вход като "ceca @@Belgrade 12 12" - програмата връща изход "venue == Belgrade", което за мен е грешен вход и  не трябва да се зачита като валиден изход или поне да връща изход "venue == @Belgrade". Джъда май нямат таква проверка.

0
19/10/2017 17:08:37
Pazzo avatar Pazzo 158 Точки

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

Ето тук можеш да видиш едно доооооста по-кратко решение с регекс - нещо което се учи към края на Fundamentals курса

1
Dokka avatar Dokka 1 Точки

Мда, регекс само съм го чувал. Но пробвах кода с различни входове като - "@lepa @@Belgrade 12 12" , "@le@pa @Belgrade 12 12", "lepa @Bel @grade 12 12" и при 2та варианта се на решаване на задачата се получават доста странни и различни работи :D

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.