Data Science - юни 2021
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 485 Точки

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

0
Primaxm avatar Primaxm 5 Точки

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

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

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

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

 

0
Vesso1980 avatar Vesso1980 485 Точки

Ъпдейта на  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 485 Точки

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

0
antonfotev avatar antonfotev 3 Точки

Може ли да обясниш една подробност в синтаксиса на 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 1276 Точки

тоя 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