[C# OOP Basics] Problem 10. ***Family Tree
Здравекте колеги,
тази задача си е доста трудна. Реших да я напиша с Class Person като в него сложих още 2 List-а, с класове за Children и Parents. Входните данни ги събирам в 5 отделни речника, колкото и вида input имаме. След това правя проверки и намирам всичките родители и деца и ги вкарвам в обекта ми от тип Person. Проблема е, че накрая се "заклах" и няма как да принтирам резултата, по начина по-който се иска в условието, а именно по реда на въвеждането на данните. За да направя каквито и да е било промени, това означава автоматично почти цялостно пренаписване на кода, а аз го мислих 1 час и още 2ч го писах, така че искам да се справя със сегашното положение, макар и да не е най-оптималното.
Това ми е кода, ZIP file: изтегли
Първият вариант за който се сетих, че може да реши проблема е ако в началото вкарам целият Input в един StringBuilder. И след това направя някакъв Customer ICompare, който първо бърка в обекта ми "person" и преди да извади данните и да ги принтира, сравнява по следният начин. Взема името и датата, примерно на децата и търси в StringBuilder-a, като подрежда стойностите според това, на кой ред в StringBuilder-а ги е засякло. Според вас, това може ли да се напише?
Вторият вариант за който се сетих сега е, ако отново запиша входа в StringBuilder, но вместо да правя Customer ICompare, да чета по редовете на StringBuilder-а и за всеки ред да правя търсене съотвено за Children или Parents, в моя обект. Като ще правя сравнение по име и по дата, докато не ми върне стойност True, за някой от 2-та входа. Ако не върне, продължавам на следващият ред и така докато мина всички редове от Input-a веднъж за да изкарам децата, и 2-ри път за да изкарам родителите.
Надявам се някой да може да помогне по тази задача. Какво мислите за 2-та варианта, които предлагам за решаване на проблема. Ясно, е че става малко неоптимално, но исках да я напиша "качествено" с класове и т.н., както най-вероятно би била написана в realwork, ако трябва да се пише нещо такова. Съответно това беше варианта за който се сетих, а и условието малко ме подведе, защото е малко объркано с начинът на въвеждане на данните и тяхната релация по между им. Все пак не искам да затрия няколко часа труд просто ей така, защото не ги вади в реда в който искам, за това се надявам да измъдрим нещо заедно :)
Условието на задачата може да се изтегли от тук., ако на някой му трябва.
########################################################################################################
########################################################################################################
UPDATE:
Задачата я реших за 80/100. Гърми ми 3-ти тест с грешен резултат. Позачистих малко решението, от всичките DateTime bulshits които се налагаше да правя, за да Parse-вам инпут-а и сега се чудя, защо по-дяволите бях тръгнал да пазя Датата в DateTime, като ние не правим нищо с нея, освен да я принтираме бях си усложнил живота с още 1 час, но нищо, поне научих 1-2 нови неща за DateTime :)
Решението може да видите ето тук https://pastebin.com/HT0ML8bQ
Вярно, не е много оптимално написано, но аз съм доволен, че поне успях да го напиша. Като съм използвал "добрите практики" за OOP, и съм си направил private fields, достъпвани през пропъртита. Аз сигурно съм единственият човек, който е избрал да подходи по този вариант, ами именно всеки различен Input да бъде пазен в собствен Речник... но това е друг въпрос :)
Ако някой има желание да разгледа решението ми и да сподели мнение ще бъде супер. Ако пък и някой знае какъв е 3-тият тест, за да го хвана защо гърми ще бъде още по-добре ама и да не го разбера, здраве да е.