Loading...
KonstantinLupov avatar KonstantinLupov 34 Точки

Напътствие към правилно решение на задача

Здравейте,

Нужна ми е малко помощ за откриването къде се корени проблема в моето решение на задачата Files: 
Получавам само 10/100 точки, като 1 тест е верен, 2 и 3 - грешни и от 4 до 10 включително гърмят.
Ето го и решението ми: http://pastebin.com/bS45yNAt

Тагове:
0
Fundamentals Module
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

Както пише на снимката от условието, която си пратил - един файл може да съществува два пъти в даден root. Единствената проверка, която правиш е дали root-ът в речника съществува, но не и дали dict[root][file] съществува. Ако съществува, трябва да го презапишеш.

Като цяло ми се струва излишно записването на всички файлове и root-ове в речника. После е и по-трудно проверяването дали имаш въобще съвпадения, както и сортирането. Дали не можеш да изчетеш всички линии, да вземеш последната, да видиш какъв extension и root се търсят и чак тогава да parse-неш линиите. Тогава ще можеш да проверяваш директно дали нещо е от даден root && extension и да си го сложиш в съответната структура, която после ще сортираш.

1
KonstantinLupov avatar KonstantinLupov 34 Точки

Добре! Наистина не съм забелязал, че 1 файл може да съществува повече от веднъж, защото не съм прочел условието, а само Input / Constraints. А решението, което предлагате ми се струва интересно и сега ще опитам.

*EDIT: Добре, по това решение - 100/100!

0
03/01/2017 23:57:52
KonstantinLupov avatar KonstantinLupov 34 Точки

Здравейте отново,

А по това решение, 80/100, грешен отговор на 8 и 9 тест, можете ли да коментирате нещо:
http://pastebin.com/fZLsY6iX

П.С.: Знам, че е разхвърляно решението, дано се ориентирате. :)

0
RoYaL avatar RoYaL Trainer 6849 Точки
{root}-{file}-{size}

Много лоша идея :) Какво ако root-ът се казва "My-Pictures" или файла "My-Photo.jpg" - стринга ти ще изглежда: "My-Pictures-My-Photo-50000" :-) Сплитвай после по тирета:)

1
ivan.d.uzunov avatar ivan.d.uzunov 22 Точки

http://pastebin.com/CVeqzSUX - ето моето решение на задачата

0
RoYaL avatar RoYaL Trainer 6849 Точки

Браво. Супер, че си ползвал SortedDictionary. :)

 

Като цяло има едно важно нещо, което трябва да знаете за речниците и то е бързината на търсенето. Ако всичко се пази под правилнит асоциации, имаш директно търсене (без претърсване на речника).

Например ако кажеш dictionary["pesho"] ще получиш стойността, която стои под ключа "pesho" директно, без да минава през всички ключове.

Ако обаче кажеш dictionary.Keys.Contains("pesho") това ще извади KeyCollection-а и ще провери всеки един от тях дали не е "pesho". Преливането от един речник в друг речник, също като цяло загубва голяма част от бързината, тъй като претърсваш речника веднъж, за да го прелееш и после го претърсваш пак за да го изпринтираш.

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

root => extension => name => size

Примерно

["Documents"] =>
	["exe"] =>
		["wow.exe"] => 45800,
		["cmd.exe"] => 33331
	["jpg"] =>
		["friends.jpg"] => 100,
		["family.jpg"] => 200
["Pictures"] =>
	["exe"] => ....
	["txt"] => ......
	["jpg"] => .......
...

съответно ако поискаш dictionary["Documents"]["jpg"] ще ти върне колекция от Dictionary-та, в която има friends и family със съответните size-ове.

Така, че имаш директно поглеждане в речника по root и extension, без да се налага да го притърсваш и можеш да foreach-неш само тези файлове за съответния root и extenson и да ги изпринтираш на екрана. Евентуално да сортираш преди това.

Ето подобно решение:

http://pastebin.com/vLJLBejd

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