Професионална програма
Loading...
+ Нов въпрос
Joro_Paspalev avatar Joro_Paspalev 22 Точки

2. Race C# - Задача от Exercise: Regular Expressions

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

задачата я решавам и Judge ми връща 100/100, но искам да попитам дали има някакъв "по-културен" начин за принтиране на топ 3 състезателите, без да използвам три пъти if и counter?

Ето го условието

Write a program that processes information about a race.

On the first line you will be given list of participants separated by ", ".

On the next few lines until you receive a line "end of race" you will be given some info which will be some alphanumeric characters. In between them you could have some extra characters which you should ignore. For example: "G!32e%o7r#32g$235@!2e". The letters are the name of the person and the sum of the digits is the distance he ran. So here we have George who ran 29 km.

Store the information about the person only if the list of racers contains the name of the person. If you receive the same person more than once just add the distance to his old distance. At the end print the top 3 racers ordered by distance in descending in the format:

"1st place: {first racer}

2nd place: {second racer}

3rd place: {third racer}"

 

Input

Output

Comment

George, Peter, Bill, Tom

G4e@55or%6g6!68e!!@

R1@!3a$y4456@

B5@i@#123ll

G@e54o$r6ge#

7P%et^#e5346r

T$o553m&6

end of race

1st place: George

2nd place: Peter

3rd place: Tom

On the 3rd input line we have Ray. He is not in the list, so we do not count his result. The other ones are valid. George has total of 55 km, Peter has 25 and Tom has 19. We do not print Bill because he is on 4th place.

 

 

Ето го и моя код: https://pastebin.com/94dSEqEG

Благодаря!

 

0
Fundamentals Module
knoteva avatar knoteva 1079 Точки

Здравей,

Аз съм го направила така:

 

var result = dict.OrderByDescending(x => x.Value).Take(3);

            int count = 1;

            foreach (var item in result)
            {
                string place = count == 1 ? "st" : count == 2 ? "nd" : "rd";
                Console.WriteLine($"{count}{place} place: {item.Key}");
                count++;
            }

1
knoteva avatar knoteva 1079 Точки

Без каунт може да се направи във фор цикъл:

 

var result = dict.OrderByDescending(x => x.Value).Take(3).ToList();

            for (int i = 1; i <= result.Count; i++) // или i <= 3. Take(3) става излишен
            {
                string place = i == 1 ? "st" : i == 2 ? "nd" : "rd";
                Console.WriteLine($"{i}{place} place: {result[i - 1].Key}");
            }

0
29/07/2019 08:53:55
Iv_Konov avatar Iv_Konov 385 Точки

Здравей,

 

.. и един алтернативен вариант:

 

===

            dict =  dict.OrderByDescending(kvp => kvp.Value).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

            Console.WriteLine($"1st place: {dict.Keys.ElementAt(0)}");
            Console.WriteLine($"2nd place: {dict.Keys.ElementAt(1)}");
            Console.WriteLine($"3rd place: {dict.Keys.ElementAt(2)}");

===

 

Поздрави,

Иван

0
Joro_Paspalev avatar Joro_Paspalev 22 Точки

Здравей, Иван,

този израз не съм го виждал -  {dict.Keys.ElementAt(0)} и незнам какво прави затова ще питам?

Предполагам, че с него мога да достъпя директно елементите по индекс както при масивите, само че се използва за речници!

И си е стандартен синтаксис -.Keys // .ElementAt(index)?

Така ли е?

Поздрави,

0
Iv_Konov avatar Iv_Konov 385 Точки

Здравей,

 

Да, точно..., но по-скоро е метод към System.Linq, а не специално за речниците - работи и при масиви/листове. Наистина, нямаше го в курса - вероятно защото няма голямо приложение... или знанията са ми малко и не знам къде другаде може да се  ползва удобно.

 

Аз съм си го търсил този метод - очаквах, че трябва да има вариант при речниците да достъпиш елемент (Key/Value) по номер на индекс - не помня дали беше от нет-а или форума. Вероятно е било точно за тази задача... Бях намерил и други "странни"  решения във форума - принтираш .First(), триеш го, принтираш отново .First() и продължаваш по същия начин.

 

А относно четене - примерно VS/F12 казва:

"Returns the element at a specified index in a sequence." 

или от нет-а:

https://stackoverflow.com/questions/4227/accessing-a-dictionary-keys-key-through-a-numeric-index

 

Разбира се, съкратеният запис на if-else-if е много готоно приложение точно в тази задача... cool 

Ползваш, това което ти е лесно и удобно.

 

Поздрави,

Иван :)

0
Joro_Paspalev avatar Joro_Paspalev 22 Точки

Много благодаря,

отивам да тествам че изпита иде :)

Поздрави,

0