Loading...
Primaxm avatar Primaxm 5 Точки

Problem 4 Snowwhite

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

Имам проблем със сортировката в тази задача. Написах я с вложени речници, написах я с обект, така и не можах да я излъжа да ми изпише сортирани резултатите. Моля някой да помогне с изписването на данните в правилен ред. :-)

Условие:

https://judge.softuni.bg/Contests/Practice/DownloadResource/2726

Моят код с речник:

https://pastebin.com/nJyxbMJi

Моят код с обект:

https://pastebin.com/M4YC5BLp

Тагове:
0
Fundamentals Module 26/05/2018 11:58:14
Vesso1980 avatar Vesso1980 486 Точки

Ето едно решение с клас - https://pastebin.com/hR1uF10n

0
Primaxm avatar Primaxm 5 Точки

Благодаря, колега :-)

Вчера за 15 минути събрах данните, после 3 часа въртях, суках не можах да ги изпиша правилно. изпуших и зарязах всичко. :-)

Днес разгледах решението. Доста странно ми изглежда. Пълним джуждетата в листа, но никъде в този лист не ъпдейтваме Physics на джуджето /ако дойде със същото име и цвят/, ъпдейта е само в Речника. После от този лист изписваме резултати. хмм :-)

В сортировката има добри идеи и ще се опитам да я използвам в моето решение. Още веднъж благодаря. :-)

 

0
Vesso1980 avatar Vesso1980 486 Точки

Ъпдейта на  phisics става в тия два реда :

                    41. var tempDwarf = alldwarfs[colour].FirstOrDefault(x => x.Name == name);
                    42. tempDwarf.Physics = Math.Max(tempDwarf.Physics, physics);

Това ми намира дублираното джудже и го запазвам в променливата tempDwarf, която е от тип Dwarf.Но понеже, обектите са от референтен тип, реално  tempDwarf сочи към същото джудже, което е в списъка с джуджета и променяйки нещо по tempDwarf аз променям и оригиналното джудже  в списъка. И във втория ред просто сравнявам неговата физика с текущата и му запазвам по-голямата.  

0
26/05/2018 10:43:06
Primaxm avatar Primaxm 5 Точки

Схванах. ъпдейтват се по референция. :-) Благодаря. :-) Аз все още се опитвам само с един лист да го излъжа, но сортира ли по цвят и вече реда на попълване /който е трети сорт/ се прецаква. 

0
Vesso1980 avatar Vesso1980 486 Точки

Е, това е много готино с речниците и вътрешната филтрация!

0
antonfotev avatar antonfotev 4 Точки

Може ли да обясниш една подробност в синтаксиса на 34-35 ред.

.ThenByDescending(x => dwarfs.Where(y => y.Key.Split(':')[1] == x.Key.Split(':')[1])
  .Count()))


1. Поправи ме, ако логик-превода ми е грешен:

Подреди в низходящ ред по дължина на поредиците, образувани от съвпадащи втори половинки на ключовете.

Подреди в низходящ ред // ThenByDescending // по дължина на поредиците // dwarfs.(Критерии).Count()//, образувани от съвпадащи втори половинки на ключовете // Тоест (Критери), тоест: Where(y => y.Key.Split(':')[1]  == x.Key.Split(':')[1] )  //.

2. В израза:  y.Key.Split(':')[1]  == x.Key.Split(':')[1] не схващам напълно откъде (логически) идва променливата x.

 


 

0
Primaxm avatar Primaxm 5 Точки

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

Ето моят финален код:

https://pastebin.com/fFVbdZ4s

Мина на 100 % в Джъдж. :-)

Доста тегава задача. На пръв поглед елементарна, но загубих цял ден покрай нея, за сметка на това научих много неща. :-)

 

 

 

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

тоя for цикъл можеш и просто с dwarf.any и вътре условието и толкова. Тоя count толкова си играеш да го напраиш а можеш направо един groupby накрая на list-a и от там Orderby и готово и тоя bigint е оverkill long/int са напълно достатъчни тук. Мисля че някъде ми се мотае решение на тая. 

0
Primaxm avatar Primaxm 5 Точки

След for-a го бях написал и с any, нещо не се получи от раз и понеже ми беше писнало вече от задачата вече, не го задълбах и оставих for-a. За groupby не се бях сетил, че може да се направи преди ордера. Може да пробвам малко по-късно да подобря решението, че наистина този count не е смислово правилен в пропъртитата на класа Dwarf.

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