Професионална програма
Loading...
+ Нов въпрос
TvaOnova avatar TvaOnova 8 Точки

06. Messages - Tech Module - Extended -> Objects and Simple Classes - More Exercises

Здравейте, някой би ли могъл да ми помогне за следната задача:

 

Очевидно някъде бъркам и то сериозно, щом Judge ми дава 60/100, проблемът, че нямам никаква представа къде и защо...

Моето решение за задачата, благодаря предварително :)

0
Fundamentals Module
kolioi avatar kolioi 621 Точки
Best Answer

Програмата ти сигурно дава грешка ако искаш да отпечаташ чата между двама юзъри, които не са регистрирани (или поне единият от тях не е регистриран), т.е. имаш нещо такова:

register pesho
register gosho
blah blah blah   --> тука двмата си разменят съобщения, но може и без това
exit
ivan spas


Може да използваш някаква функция за да провериш дали даден юзър е регистриран, например това

bool IsUserRegistered(List<User> users, User user)
{
   return users.Where(u => u.Username == user.Username).Count() > 0;
}


(обаче users.Contains(user) няма да работи коректно)

За отпечатване на съобщенията има доста по-лесен начин, например така:

int maxCount = Math.Max(firstUserMsgList.Count, secondUserMsgList.Count);
for (int i = 0; i < maxCount; i++)
{
   if(i < firstUserMsgList.Count)
      Console.WriteLine($"{usernames[0]}: {firstUserMsgList[i]}");
   if (i < secondUserMsgList.Count)
      Console.WriteLine($"{secondUserMsgList[i]} :{usernames[1]}");
}

П.П. Забравих да кажа, че firstUserMsgList и secondUserMsgList са List<string>.

0
16/05/2017 15:31:45
TvaOnova avatar TvaOnova 8 Точки
int maxCount = Math.Max(firstUserMsgList.Count, secondUserMsgList.Count);
for (int i = 0; i < maxCount; i++)
{
   if(i < firstUserMsgList.Count)
      Console.WriteLine($"{usernames[0]}: {firstUserMsgList[i]}");
   if (i < secondUserMsgList.Count)
      Console.WriteLine($"{secondUserMsgList[i]} :{usernames[1]}");
}

С това изписване на резултатите Judge ми даде 100/100 ! Мерси много, честно казано точно за този начин на изписване никога не бих се сетил да го направя...

0
kolioi avatar kolioi 621 Точки

Ами малко е дървено, но върши работа smiley

Аз не съм тествал моя код в Джадж и не знам колко точки ще ми даде. Почти същия е като твоя, само класа Message ми е по-различен

class Message
{
    public string Content { get; set; }
    public User Sender { get; set; }
}

Иначе ми хареса как използваш LINQ.

0
vdim15 avatar vdim15 Trainer 43 Точки

Решението ти е доста добро, при това и вярно :) В такива случай, когато излизат примерните входове и изходи, винаги тестваш граничните случаи. Единият ти е даден, когато първия юзър има повече съобщения. В другия случай обаче, втория юзър праща съобщения накрая, а излизат форматирани все едно са казани от първия юзър.... Схемата е същата като на всяко чат приложение :)

0
17/05/2017 13:43:30
vdim15 avatar vdim15 Trainer 43 Точки

Ето примерен вход, който си измислих за да тествам

register John
John send Harry harry_you_there?
register Harry
John send Harry harry?
register Donald
Harry send John yeah_sorry_was_out...
Harry send John wassup?
Donald send John Yo_John?
Donald send Jonh You_there?
John send Harry thank_god!!
John send Harry I_need_you!
Harry send John You_got_food?
Harry send John Otherwise_l_am_busy!
exit
John Harry

 

0
TvaOnova avatar TvaOnova 8 Точки

Ясно! Оправих и тази част от кода, ще го имам предвид и за вбъдеще.Мерси много за помощта :)

П.С - "Решението ти е доста добро", до последно си мислех, че решението ми е доста доста омазано, абсолютно грешно и липсва логика в него , което доста ме зарадва :D 

1
16/05/2017 21:53:36
vdim15 avatar vdim15 Trainer 43 Точки

Хаха, ами самото условие е доста тежко и решението е хубаво разделено в методи, което значително ме улесни да прочета кода ти :) Разбира се, има възможност да се съкрати някой друг ред както и един колега е споменал по-долу, но това идва с рутината. Като цяло използването на LINQ също доста "изчиства" кода, което е налице :)

0
StoilValkov avatar StoilValkov 10 Точки

Някой може ли да погледне и моето решение до 60/100 го направих от пъривя път и от там на татъка каквото и да пробвах не можах да мина тази граница явно нещо много важно изпускам, но нямам никаква идея какво е.

Линк

0
spzvtbg avatar spzvtbg 581 Точки

успях да помогна за още 20 точки - ако ти върши работа ето 80 / 100

0
StoilValkov avatar StoilValkov 10 Точки

По принцип не разбирам идеята да ти минават нулевите тестове пък другите не(При положение, че не си хардкодвал).
Та се чудя дали няма някакси да го измислят да давят най-кофти тестовете за нулеви и в момента в който минат да минава всичко друго...

Но мерси все пак.

 

0
08/07/2017 20:40:06