Loading...
icowwww avatar icowwww 2813 Точки

Здравей,

За сортирането съм сигурен, че е грешно.

Като гледам имаш my_dict, което е dictionary като value-то е dictionary

За да достъпиш gold стойността с my_dict.items() трябва да го направиш да излежда подобно на:

max_gold = sorted(my_dict.items(), key=lambda x: (x[1].get("gl"), x[0]), reverse=True)

my_dict.items() ще изведеде tuple с първи елемент града и втори елемент dictionary с key gl или pl

с x[1] ще вземеш втората част на tuple, която е речника

с x[1].get("gl") - стойността на gl

След това за да направиш първо descending order на gold и после ascending на града трябва да махнеш reverse=True и да използваш минус за първото, което е int:

max_gold = sorted(my_dict.items(), key=lambda x: (-x[1].get("gl"), x[0]))

 

 

 

1
krum_43 avatar krum_43 756 Точки

Здрвей GeorgiG05,

Моето решение също забива на 58/100.

Ще се радвам ако някой сподели решение 100/100 на въпросната задача.

Ето го и моят код (C#):

https://pastebin.com/YcL15AwV

0
22/07/2021 12:53:57
Axiomatik avatar Axiomatik 2422 Точки

;-)

using System;
using System.Linq;
using System.Collections.Generic;

namespace pirates
{
    class Program
    {
        static void Main(string[] args)
        {
            var townList = new Dictionary<string, List<int>>();

            string townInput = Console.ReadLine();

            while (townInput != "Sail")
            {
                string[] townSplit = townInput
                    .Split("||", StringSplitOptions.RemoveEmptyEntries);
                if (townSplit.Length == 3)
                {
                    string town = townSplit[0];
                    int population = int.Parse(townSplit[1]);
                    int gold = int.Parse(townSplit[2]);
                    if (!townList.ContainsKey(town))
                    {
                        townList[town] = new List<int>();
                        townList[town].Add(population);
                        townList[town].Add(gold);
                    }
                    else
                    {
                        townList[town][0] += population;
                        townList[town][1] += gold;
                    }

                }

                townInput = Console.ReadLine();
            }

            string commands = Console.ReadLine();

            while (commands != "End")
            {
                string[] cmdSplit = commands
                    .Split("=>", StringSplitOptions.RemoveEmptyEntries);

                string operation = cmdSplit[0];

                if (operation == "Plunder")
                {
                    string town = cmdSplit[1];
                    int population = int.Parse(cmdSplit[2]);
                    int gold = int.Parse(cmdSplit[3]);
                    if (townList.ContainsKey(town))
                    {
                        Console.WriteLine($"{town} plundered! {gold} gold stolen, {population} citizens killed.");
                        townList[town][0] -= population;
                        townList[town][1] -= gold;
                        if (townList[town][0] <= 0 || townList[town][1] <= 0)
                        {
                            Console.WriteLine($"{town} has been wiped off the map!");
                            townList.Remove(town);
                        }
                    }

                }
                else if (operation == "Prosper")
                {
                    string town = cmdSplit[1];
                    int gold = int.Parse(cmdSplit[2]);
                    if (gold < 0)
                    {
                        Console.WriteLine("Gold added cannot be a negative number!");
                    }
                    else
                    {
                        townList[town][1] += gold;
                        int currentGold = townList[town][1];
                        Console.WriteLine($"{gold} gold added to the city treasury. {town} now has {currentGold} gold.");
                    }
                }

                commands = Console.ReadLine();
            }

            if (townList.Any())
            {
                Console.WriteLine($"Ahoy, Captain! There are {townList.Count} wealthy settlements to go to:");
                foreach (var (town, data) in townList.OrderByDescending(data => data.Value[1]).ThenBy(name => name.Key))
                {
                    Console.WriteLine($"{town} -> Population: {data[0]} citizens, Gold: {data[1]} kg");
                }
            }
            else
            {
                Console.WriteLine("Ahoy, Captain! All targets have been plundered and destroyed!");
            }

        }
    }
}

 

1
krum_43 avatar krum_43 756 Точки

Мерси за кода.

Както обикновено решението ти е отлично.Варианта с един речник е  по-добър,a при мен липсваше проверка за златото(if gold<=0).

 Thank you so much !

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