Loading...
TeMePyT avatar TeMePyT 142 Точки

Dictionaries, Lambda and LINQ - Exercises-11. Dragon Army

Привет. Опитах да реша тази задача, https://judge.softuni.bg/Contests/Practice/Index/209#10, като опитах да я реша с клас. Резултатът беше това - https://pastebin.com/atMVmvpj. Гърми на 2 теста, и след 2 часа дебъгване честно казано идея си нямам защо. Приемам всякакви насоки. Благодаря предварително.

Тагове:
0
Programming Fundamentals
k.sevov avatar k.sevov 1077 Точки
Best Answer

Проблемът идва от това, че на 55-57 ред си пропуснал да добавиш също и типът да е равен, а не само имената (както правилно си го направил по-рано на 48-ми). Всичко друго си работи добре. Бих искал да добавя, че не съм съгласен с колегата, че кодът ти е ужасен. Да, има по-ефективни начини да се напише, но си използвал наличните си знания за да напишеш подреден, четим и разбираем код, което е чудесно. 

1
TeMePyT avatar TeMePyT 142 Точки

Само това не се бях сетил. 100/100, благодаря много. Ще се разровя сега да видя как да сетна default values в класа и да ползвам тях.

0
k.sevov avatar k.sevov 1077 Точки

С default values ще е малко кофти, че не е ясно коя позиция е пропусната и сигурно ще трябва да подаваш named parameters, но съм съгласен, че ще ти е полезно да го пробваш така. Другият вариант е да си правиш проверката още при четенето на входа, примерно нещо такова. Добавих и две възможности за ъпдейтването на стойностите, тъй като по твоя начин си обикаляш три пъти листа да търсиш обекта всеки път. 

1
TeMePyT avatar TeMePyT 142 Точки

Благодаря. Кой да се сети че може да си извадя обекта и да го манипулирам, вместо да ровя да го търся постоянно. Трябва да свикна.

0
Delerium avatar Delerium 29 Точки

Пробвай да ги вкараш в Dictionary, вместо List може да се чупи нещо от там.

1
06/05/2018 15:41:49
why_where_what avatar why_where_what 118 Точки

Много е вероятно някоя от Linq заявките да не прави каквото трябва.

Ще ти дам мое решение, но е без клас. В крайна сметка прави същото  но по друг начин. Ако искаш разгледай. --> https://github.com/whywherewhat/ProgrammingFundamentalsMay2017/blob/master/08.Dictionaries.Lambda.LINQ-Exercises/11.DragonArmy/Program.cs

1
06/05/2018 21:31:05
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

гледам го това решение и ми се плаче.толкова try catch имаш int.tryparse.... и още доста други неща и като видя такъв код и ми се плаче https://pastebin.com/meJyiiXS ето едно решение с речник и обект. Дори не съм го оптимизирал но е доста по четимо. И да проблема ти е вероятно в linq както е казал колегата. Честно хора дали са ви толкова неща от ms опитвайте се да ги ползвате тоя try/catch  го видях....

И тоя var като го слагате навсякъде.. не може да проследите какво правите малко е глупаво var e динамичен ти си мислиш че едно а то станало друго.Както ще видиш в моя код съм ог ползвал на едно място защото другия вариант беше :

KeyValuePair<string,List<Dragon>> и просто си го спестих. 

А първия коментар че чупи заради list чупи е безумен.

1
06/05/2018 22:21:52
TeMePyT avatar TeMePyT 142 Точки

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

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

няма какво да се извиняваш.просто още щом си  тепърва на тех модула.Още по-зле че ползваш само var половината неща не са ти ясни къде отиват, var е ок ако е някакво сложно сортиране и е мъка да опишеш нещата.

За мен проблема е в linq което правиш при презаписването на дракона и може би при сортирането. Четенето на чужд код също помага много и е полезно умение.Няма нищо лошо да го правиш дори нататък е полезно затова в последната една година помагам по форума.

Като стигнеш/ако стигнеш до професионалните модули там вече се налага да оправяш счупен код и уменията с дебъгера са важни за тези неща.Да не говорим че от чужд код се научава адски много.Направил си примерно едно решение с 200 реда код и после гледаш друго с 2 сортировки кастване и тн за 10 реда...Никога не знаеш какво ще видиш.А и перфектен код няма,всеки прави бъгове просто има умно писане на код и чисто мазане.

0
06/05/2018 22:51:55
TeMePyT avatar TeMePyT 142 Точки

По принцип не използвам var, още в началото на бейзикс четох някъде, че е не е препоръчително. Тук имам 4-5 просто защото са неща, които не са ми много ясни все още и леко си нямам на идея какво точно да извикам. Чета код, прегледах стари теми, минах задачите с дебъгване и коригиране на калпав код от лекциите, знам как да ползвам F10 и F11, както и да създам собствен инпут. Просто ми беше хикс защо моя не работи. Наистина се оказа LinQ, при коригирането на вече съществуващ дракон не проверявах за име и тип, а само за име. В моя инпут имах дракони с еднакви имена и различен тип, но... пак не ми свърши работа, щот не гледам. Сега търся как да задам дефолтни стойности в класа и да ги извикам тях, за да направя кода "по-красив". 

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