Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

EricDraven avatar EricDraven 275 Точки
Best Answer

Единствената проверка която пропускаш е да провериш дали има space преди @-та

след singer = input[0]; добави следното

if(singer.EndsWith(“ “) == false)

{

    continue;

}

и ще мине 100/100 :)

0
valentina.yankova avatar valentina.yankova 5 Точки

Готово !!! Judge каза 100/100 :D

Благодаря!

0
TonyTroev avatar TonyTroev 26 Точки

По-добре е да използваш Regex, когато четеш данните, защото така  изглежда объркано на пръв поглед и очевидно не е правилен подход. Ето моето решение. Надявам се,че ще ти е от помощ!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace _10_SerbianUnleashed
{
    class SerbianUnleashed
    {
        static void Main(string[] args)
        {
            Dictionary<string, Dictionary<string, int>> singers = new Dictionary<string, Dictionary<string, int>>();
            Regex name = new Regex(@"^([\w\s]+?)\s+@([\w\s]+?)\s(\d+)\s(\d+)");

            while (true)
            {
                string data = Console.ReadLine();
                if (data == "End")
                {
                    break;
                }

                if (name.IsMatch(data))
                {
                    GroupCollection group = name.Match(data).Groups;
                    string venue = group[2].Value;
                    string singer = group[1].Value;
                    int price = int.Parse(group[3].Value);
                    int count = int.Parse(group[4].Value);
                    if (!singers.ContainsKey(venue))
                    {
                        singers.Add(venue, new Dictionary<string, int>());
                    }
                    if (!singers[venue].ContainsKey(singer))
                    {
                        singers[venue].Add(singer, 0);
                    }
                    singers[venue][singer] += price * count;
                }
            }

            foreach (var pair in singers)
            {
                Console.WriteLine($"{pair.Key}");

                foreach (var el in pair.Value.OrderByDescending(x => x.Value))
                {
                    Console.WriteLine($"#  {el.Key} -> {el.Value}");
                }
            }
        }
    }
}

 

0
TonyTroev avatar TonyTroev 26 Точки

Ти не извършваш проверки дали имената на певците и градовете съдържат само букви, цифри или долна черта, което ти чупи кода в този случай.

0
19/04/2018 00:28:58
antoniyaatanasova avatar antoniyaatanasova SoftUni Team Trainer 53 Точки

Мисля, че е страхотно, когато имаме желание и време да помогнем на колега, да го направим както е подобаващо. Най - вече с код в https://pastebin.com/ и с препоръки как той може да подобри алгоритъма си и решението си. Аз лично винаги, когато питам някой се обръщам към него с молба за препоръки върху моя код, а не готово негово решение на проблема, каквото реално има и в интернет. И още по - хубавото е, че това не е загуба на време, а учи на много ценно умение за всеки един програмист, да се ориентира бързо в чужд код, да намира по - бързо решения на дадени проблеми и да рефакторира от по начален етап. 

2
valentina.yankova avatar valentina.yankova 5 Точки

В задачата е казано:

"The input data will always be valid and in the format described. There is no need to check it explicitly" -това е по условие.

0
19/04/2018 07:04:37
valentina.yankova avatar valentina.yankova 5 Точки

От коментарите ви оставам с впечатлението, че задачата няма как да се реши без Regex, така ли? 

Ще съм благодарна  на конкретни варианти за алгоритъм при подаване на информацията без Regex. Защото именно това беше целта ми , молейки за помощ. 

В момента се уча аз сама да търся логиката и да пиша кода, търсейки мои алгоритми и да откривам грешките в логиката си , като по този начин уча и разбирам материала по-добре. Все още дори не съм започнала Tech Module официално, така че просто пробвам различни начини, за да реша задача единствено с научения до момента материал(т.е.до Dictionaries-Regex е три теми след това). Все още по-важно ми е да тренирам да мисля алгоритмично и логично, отколкото да кодя. Като се почувствам по-уверена в това, обещавам и аз да започна да ползвам чужд код за по-бързо.

0
19/04/2018 12:08:34
vasildiavolo avatar vasildiavolo 12 Точки

Колежке, разбирам те напълно. И аз мъча Tech-а със стари лекции, ще го почвам май, живи и здрави.

Задачата я реших без Regex (даже още не знам точно какво чудо е това), а само с логика и мъка, разбира се :) Та не се отказвай, защото някой, дето е минал материала напред е решил, че само така може. То и други неща могат да станат по много по-лесни начини, ама ги правим по трудния, за да се научим. Задачата не случайно не е сложена в лекцията/упраженията за Regex, а в тези за Dictionary.

Нямам време в момента да прегледам кода ти, но довечера ще се постарая да го видя и ако мога да помогна.

0
19/04/2018 10:18:46
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

има как и без регекс с ръчни проверки но е грозно.и има вариант да изгърми за време. Но без регекс трябва с ръчни проверки на певеца и залата да проверяваш дали са правилни. Или трябва да ги скипнеш.затова начини много, string методи,с linq s int.tryparse примерно и тн и тн. Но ние просто сме свикнали вече да си правим по-лесен живота.с 5 реда код и регекс ще си спестя примерно 30-40 реда код и n- броя проверки.

И пак за пореден път го повтарям на форума. Това че не сте взели нещо на лекциите не означава нищо трябва да се учи и много сам.това извинение ама на лекциите го нямаше горе долу след pf спира да работи. След време като ви дадат обекти и трябва да ги използвате гледате манипулирате...А  задачите никога не ви ги дават за по-трудния начин..И особено тези с звездичките са нарочно такиав да прочетете в нета или да ипозлвате някакъв нов вид знание или материал.

 

0
valentina.yankova avatar valentina.yankova 5 Точки

Значи програмата ми гърми при вход даден от рода на Ceca345 или Lepa 99  или @@@Sunny Beach , така ли да разбирам? 

Честно, ако е така, не би ми минало дори през ума, че биха ми подали и такъв вид входни данни, особено при написано в условието  "The input data will always be valid and in the format described. There is no need to check it explicitly" 

Иначе това за самообучението ми е пределно ясно. Аз обаче помолих за коментар на кода, а  не за съвет как да се уча да програмирам. Все още не мога да преценя коя задача бих могла да реша , разчитайки само на логика и  взет материал и за  коя е необходим  нов материал или помощ от нета, като например в случая с Regex. При положение, че съм съвсем начинаеща в тази област и  все още уча основните неща -какви са функционалностите на различните методи и кое как работи в програмирането и дори не знаех за какво служи Regex, нямаше как, без тази дискусия да разбера, че е най-добрият метод за проверка на входа при тази задача. Ако знаех всичко за това кое как се прави, едва ли щях да съм тук и да питам.

Благодаря за коментарите!

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