Сръбско Unleashed
Моля за помощ относно задачата от Dictionaries .
Judge дава 70/100 , а не мога да открия какво пропускам или греша в кода.
Условието на задачата- задача №10 : тук
Моят код ТУК : Сръбско Unleashed
Моля за помощ относно задачата от Dictionaries .
Judge дава 70/100 , а не мога да открия какво пропускам или греша в кода.
Условието на задачата- задача №10 : тук
Моят код ТУК : Сръбско Unleashed
Единствената проверка която пропускаш е да провериш дали има space преди @-та
след singer = input[0]; добави следното
if(singer.EndsWith(“ “) == false)
{
continue;
}
и ще мине 100/100 :)
По-добре е да използваш 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}");
}
}
}
}
}
Ти не извършваш проверки дали имената на певците и градовете съдържат само букви, цифри или долна черта, което ти чупи кода в този случай.
Мисля, че е страхотно, когато имаме желание и време да помогнем на колега, да го направим както е подобаващо. Най - вече с код в https://pastebin.com/ и с препоръки как той може да подобри алгоритъма си и решението си. Аз лично винаги, когато питам някой се обръщам към него с молба за препоръки върху моя код, а не готово негово решение на проблема, каквото реално има и в интернет. И още по - хубавото е, че това не е загуба на време, а учи на много ценно умение за всеки един програмист, да се ориентира бързо в чужд код, да намира по - бързо решения на дадени проблеми и да рефакторира от по начален етап.
В задачата е казано:
"The input data will always be valid and in the format described. There is no need to check it explicitly" -това е по условие.
От коментарите ви оставам с впечатлението, че задачата няма как да се реши без Regex, така ли?
Ще съм благодарна на конкретни варианти за алгоритъм при подаване на информацията без Regex. Защото именно това беше целта ми , молейки за помощ.
В момента се уча аз сама да търся логиката и да пиша кода, търсейки мои алгоритми и да откривам грешките в логиката си , като по този начин уча и разбирам материала по-добре. Все още дори не съм започнала Tech Module официално, така че просто пробвам различни начини, за да реша задача единствено с научения до момента материал(т.е.до Dictionaries-Regex е три теми след това). Все още по-важно ми е да тренирам да мисля алгоритмично и логично, отколкото да кодя. Като се почувствам по-уверена в това, обещавам и аз да започна да ползвам чужд код за по-бързо.
Колежке, разбирам те напълно. И аз мъча Tech-а със стари лекции, ще го почвам май, живи и здрави.
Задачата я реших без Regex (даже още не знам точно какво чудо е това), а само с логика и мъка, разбира се :) Та не се отказвай, защото някой, дето е минал материала напред е решил, че само така може. То и други неща могат да станат по много по-лесни начини, ама ги правим по трудния, за да се научим. Задачата не случайно не е сложена в лекцията/упраженията за Regex, а в тези за Dictionary.
Нямам време в момента да прегледам кода ти, но довечера ще се постарая да го видя и ако мога да помогна.
има как и без регекс с ръчни проверки но е грозно.и има вариант да изгърми за време. Но без регекс трябва с ръчни проверки на певеца и залата да проверяваш дали са правилни. Или трябва да ги скипнеш.затова начини много, string методи,с linq s int.tryparse примерно и тн и тн. Но ние просто сме свикнали вече да си правим по-лесен живота.с 5 реда код и регекс ще си спестя примерно 30-40 реда код и n- броя проверки.
И пак за пореден път го повтарям на форума. Това че не сте взели нещо на лекциите не означава нищо трябва да се учи и много сам.това извинение ама на лекциите го нямаше горе долу след pf спира да работи. След време като ви дадат обекти и трябва да ги използвате гледате манипулирате...А задачите никога не ви ги дават за по-трудния начин..И особено тези с звездичките са нарочно такиав да прочетете в нета или да ипозлвате някакъв нов вид знание или материал.
Значи програмата ми гърми при вход даден от рода на 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, нямаше как, без тази дискусия да разбера, че е най-добрият метод за проверка на входа при тази задача. Ако знаех всичко за това кое как се прави, едва ли щях да съм тук и да питам.
Благодаря за коментарите!
Готово !!! Judge каза 100/100 :D
Благодаря!