Loading...
markovood avatar markovood 11 Точки

09. ForceBook не минава 1 тест, помощ

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

става въпрос за задача 09. ForceBook от Tech Module 4.0, Dictionaries, Lambda and LINQ - Exercise,

може ли някой да сподели тест номер 8 или поне да каже какво тества че вече тотално зациклих.

Докарах го до 90/100 но този 8-ми тест ми боде очите дет  се вика.

Ето моя код:

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

namespace _09._ForceBook
{
    public class ForceBook
    {
        public static void Main()
        {
            var forceMap = new Dictionary<string, SortedSet<string>>();
            var forceUsers = new HashSet<string>();
            var sides = new List<string>();

            while (true)
            {
                string input = Console.ReadLine();
                if (input == "Lumpawaroo")
                {
                    break;
                }

                if (input.IndexOf(" | ") >= 0)
                {
                    // If you receive forceSide | forceUser you should check if such forceUser already exists,
                    // and if not, add him/her to the corresponding side.
                    string[] inputDetails = input.Split(" | ");
                    string forceSide = inputDetails[0];
                    string forceUser = inputDetails[1];
                    if (!forceUsers.Contains(forceUser))
                    {
                        if (forceMap.ContainsKey(forceSide))
                        {
                            forceMap[forceSide].Add(forceUser);
                        }
                        else
                        {
                            forceMap.Add(forceSide, new SortedSet<string>() { forceUser});
                        }
                    }

                    forceUsers.Add(forceUser);
                    if (!sides.Contains(forceSide))
                    {
                        sides.Add(forceSide);
                    }
                }
                else
                {
                    // If you receive a forceUser -> forceSide you should check if there is such 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 new registered forceUser. 
                    string[] inputDetails = input.Split(" -> ");
                    string forceUser = inputDetails[0];
                    string forceSide = inputDetails[1];
                    if (forceUsers.Contains(forceUser))
                    {
                        // change his side
                        string userCurrentSide = string.Empty;
                        string userNewSide = string.Empty;
                        foreach (var key in forceMap.Keys)
                        {
                            if (forceMap[key].Contains(forceUser))
                            {
                                userCurrentSide = key;
                            }
                            else
                            {
                                userNewSide = key;
                            }
                        }

                        forceMap[userCurrentSide].Remove(forceUser);
                        forceMap[userNewSide].Add(forceUser);
                    }
                    else
                    {
                        if (forceMap.ContainsKey(forceSide))
                        {
                            forceMap[forceSide].Add(forceUser);
                        }
                        else
                        {
                            forceMap.Add(forceSide, new SortedSet<string>() { forceUser });
                        }
                    }

                    // Then you should print on the console: "{forceUser} joins the {forceSide} side!"
                    Console.WriteLine($"{forceUser} joins the {forceSide} side!");
                    forceUsers.Add(forceUser);
                    if (!sides.Contains(forceSide))
                    {
                        sides.Add(forceSide);
                    }
                }
            }

            // 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

            var ordered = forceMap.OrderByDescending(x => x.Value.Count).ThenBy(x => x.Key);
            foreach (var item in ordered)
            {
                string forceSide = item.Key;
                var members = item.Value;
                if (members.Count > 0)
                {
                    Console.WriteLine($"Side: {forceSide}, Members: {members.Count}");
                    foreach (var member in members)
                    {
                        Console.WriteLine($"! {member}");
                    } 
                }
            }
        }
    }
}

 

Ето и условието: https://softuni.bg/downloads/svn/soft-tech/Sept-2018/CSharp/06-Dictionaries/Exercise/06.%20Dictionaries-Lambda-LINQ-Exercises.docx

0
Fundamentals Module 01/11/2018 12:14:13
DyNaMiXx7 avatar DyNaMiXx7 1 Точки

Не ти е необходима променливата userNewSide при замяната на страните, защото дефакто сегашната я търсиш с foreach цикъла и след като я намериш я сетваш в променливата userCurrentSide. След това трябва да брейкнеш foreach и да направиш проверката дали речника съдържа новия forceSide - ако не го съдържа създаваш листа, а ако го съдържа просто махаш стария side и добавяш на негово място новия. Мисля, че задачата може да се реши само с 1 речник без да използва лист. Иначе ето твоя код променен:
 

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

namespace _09ForceBook
{
    class Program
    {
        static void Main(string[] args)
        {
            var database = new Dictionary<string, List<string>>();
            var forceUsers = new List<string>();

            string input = string.Empty;
            while ((input = Console.ReadLine()) != "Lumpawaroo")
            {
                if (input.IndexOf(" | ") >= 0)
                {
                    string[] tokens = input.Split(" | ");
                    string forceSide = tokens[0];
                    string forceUser = tokens[1];

                    if (!forceUsers.Contains(forceUser))
                    {
                        if (!database.ContainsKey(forceSide))
                        {
                            database.Add(forceSide, new List<string>() { forceUser });
                        }
                        else
                        {
                            database[forceSide].Add(forceUser);
                        }
                    }

                    forceUsers.Add(forceUser);
                }
                else
                {
                    string[] tokens = input.Split(" -> ");
                    string forceUser = tokens[0];
                    string forceSide = tokens[1];

                    // change sides
                    if (forceUsers.Contains(forceUser))
                    {
                        string userCurrentSide = string.Empty;
                        foreach (var key in database.Keys)
                        {
                            if (database[key].Contains(forceUser))
                            {
                                userCurrentSide = key;
                                break;
                            }
                        }

                        if (!database.ContainsKey(forceSide))
                        {
                            database[forceSide] = new List<string>();
                        }
                        database[userCurrentSide].Remove(forceUser);
                        database[forceSide].Add(forceUser);
                    }
                    else
                    {
                        if (!database.ContainsKey(forceSide))
                        {
                            database.Add(forceSide, new List<string>() { forceUser });
                        }
                        else
                        {
                            database[forceSide].Add(forceUser);
                        }
                    }

                    Console.WriteLine($"{forceUser} joins the {forceSide} side!");
                    if (!forceUsers.Contains(forceUser))
                    {
                        forceUsers.Add(forceUser);
                    }
                }
            }


            foreach (var item in database.OrderByDescending(x => x.Value.Count).ThenBy(x => x.Key))
            {
                string forceSide = item.Key;
                var members = item.Value;
                if (members.Count > 0)
                {
                    Console.WriteLine($"Side: {forceSide}, Members: {members.Count}");
                    foreach (var member in members.OrderBy(x => x))
                    {
                        Console.WriteLine($"! {member}");
                    }
                }
            }
        }
    }
}

Аз също имах затруднения с тази задача и си помогнах с твоя код, но благодаря и на колегата от JavaScript Tech Module, който ми съдейства!

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