Loading...
sevdalin avatar sevdalin 38 Точки

[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-тият тест, за да го хвана защо гърми ще бъде още по-добре ама и да не го разбера, здраве да е.

 

Тагове:
1
C# OOP Basics 01/06/2017 17:29:09
AlexanderPetkov27 avatar AlexanderPetkov27 1 Точки

Ето моето решение на С# дава 100/100

https://pastebin.com/t8izDUcx 

качвам само main metoda, клас Person си го знаете. 

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