Loading...
Nikolamv95 avatar Nikolamv95 4 Точки

09. ForceBook - Associative Arrays

Здравейте някой може ли да ми помогне за тази задача. Пробвах всякакви варианти всичко излиза, но в джъдж ми дава 50 точки. Трети ден я боря тази задача :))

https://pastebin.com/c9qGN4mr

 

The force users are struggling to remember which side are the different forceUsers from, because they switch them too often. So you are tasked to create a web application to manage their profiles. You should store an information for every unique forceUser, registered in the application.

You will receive several input lines in one of the following formats:

{forceSide} | {forceUser}

{forceUser} -> {forceSide}

The forceUser and forceSide are strings, containing any character.

If you receive forceSide | forceUser, you should check if such forceUser already exists, and if not, add him/her to the corresponding side.

If you receive a forceUser -> forceSide, you should check if there is such a forceUser already and if so, change his/her side. If there is no such forceUser, add him/her to the corresponding forceSide, treating the command as a new registered forceUser.
Then you should print on the console: "{forceUser} joins the {forceSide} side!"

You should end your program when you receive the command "Lumpawaroo". At that point you should print each force side, ordered descending by forceUsers count, than ordered by name. For each side print the forceUsers, ordered by name.

In case there are no forceUsers in a side, you shouldn`t print the side information.

Input

Light | Gosho

Dark | Pesho

Lumpawaroo

Lighter | Royal

Darker | DCay         

Ivan Ivanov -> Lighter

DCay -> Lighter

Lumpawaroo

 

 

Благодаря ви!

Тагове:
0
C# Fundamentals
MartinBG avatar MartinBG 4803 Точки

Имаше няколко проблема в решението, като това са по-важните:

  1. Програмата гърми, ако при команда "{forceUser} -> {forceSide}" forceSide не съществува (трябва да се създаде)
  2. Неправилна сортировка (първо се сортира по брой потреители и после по име на страната)

Това е оправеното решение, като съм му направил и малък рефакторинг:

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

namespace ForceBook
{
    internal static class Program
    {
        private static void Main()
        {
            var dicOfSideAndPlayers = new Dictionary<string, List<string>>();

            string input;
            while ("Lumpawaroo" != (input = Console.ReadLine()))
            {
                if (input.Contains(" | "))
                {
                    var data = input.Split(" | ").ToArray();
                    var forceSide = data[0];
                    var forceUser = data[1];

                    if (PlayerExist(forceUser, dicOfSideAndPlayers))
                    {
                        continue;
                    }

                    if (!dicOfSideAndPlayers.ContainsKey(forceSide))
                    {
                        dicOfSideAndPlayers.Add(forceSide, new List<string>());
                    }

                    dicOfSideAndPlayers[forceSide].Add(forceUser);
                }
                else if (input.Contains(" -> "))
                {
                    var data = input.Split(" -> ").ToArray();
                    var forceUser = data[0];
                    var forceSide = data[1];

                    RemoveUser(forceUser, dicOfSideAndPlayers);
                    
                    if (!dicOfSideAndPlayers.ContainsKey(forceSide))
                    {
                        dicOfSideAndPlayers.Add(forceSide, new List<string>());
                    }

                    dicOfSideAndPlayers[forceSide].Add(forceUser);
                    Console.WriteLine($"{forceUser} joins the {forceSide} side!");
                }
            }

            var filtDicOfSideAndPlayers = dicOfSideAndPlayers
                .Where(x => x.Value.Count > 0)
                .OrderByDescending(x => x.Value.Count)
                .ThenBy(x => x.Key);

            foreach (var (key, value) in filtDicOfSideAndPlayers)
            {
                Console.WriteLine($"Side: {key}, Members: {value.Count}");

                foreach (var names in value.OrderBy(name => name))
                {
                    Console.WriteLine($"! {names}");
                }
            }
        }

        private static void RemoveUser(string namePlayer, Dictionary<string, List<string>> dicOfSideAndPlayers)
        {
            foreach (var users in dicOfSideAndPlayers.Values)
            {
                users.Remove(namePlayer);
            }
        }

        private static bool PlayerExist(string namePlayer, Dictionary<string, List<string>> dicOfSideAndPlayers)
        {
            return dicOfSideAndPlayers
                .SelectMany(item => item.Value)
                .Any(name => name == namePlayer);
        }
    }
}

Питайте, ако има нещо неясно.

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