Loading...
nick.genov avatar nick.genov 104 Точки

Enumerations and Attributes Problem 11: Create Custom Class Attribute

Здравейте,

Затруднявам се да разбера какво бъркам в решението на задачата: http://pastebin.com/0BVwfzbf

Нулевият тест минава успешно. Прескочих имплементацията на Weapon класа, мислейки си, че не е от значение в случая. Може ли за насока какво не съм съобразил?

 

 

Тагове:
0
C# OOP Basics
ArmenPotourlyan+deleted! avatar ArmenPotourlyan+deleted! 488 Точки

Предполагам, че задачата изисква всички команди от предишната задача - т.е. надгражда задача 10 Inferno Infinity.

0
nick.genov avatar nick.genov 104 Точки

ОК, сега боря Inferno Infinity и ще видим :)

0
murkata86 avatar murkata86 10 Точки

Е да де, ама как да си ъплоудна файла, при условие, че максималната големина на zip файла е 16KB, а архивирания ми файл е 40KB. Възможно е файла да е толкова голям файла понеже, докато писах 10 задача, гледах в същото време да правя и 12-та...

0
stambi4a avatar stambi4a 126 Точки

Опитай да не архивираш bin и obj папките от папката на проекта.

0
murkata86 avatar murkata86 10 Точки

Това е ясно. Винаги така архивирам. На 10 задача, позволената големина на файла е 345.55KB и там нямам проблеми.

0
stambi4a avatar stambi4a 126 Точки

Ами, виж кой файл или папка гълта толкова ресурси и ако не ти трябва го махни или влез в него и виж какво не ти трябва вътре. При мен zip-а  е 9.8kb, не е като да съм спестил код, а на 10 задача е 8.8kb, което ме навежда на мисълта, че там judge админите са направили някаква грешка.

0
murkata86 avatar murkata86 10 Точки

Решението на 10 задача при теб включва ли и решението на 12? Понеже моето го включва и отделно имам много класове за пръжията, за gems, interfaces, factories, класове за всяка команда, класове за четене от и писане по конзолата, енумерации и от там големия размер на файла....

 

0
stambi4a avatar stambi4a 126 Точки

     Ами, 12 задача не съм я решавал, защото това което се искаше го бях направил без inputreader и outputwriter и command factory. Тоест решението на 10 почти нямаше нужда от рефакторинг. Рефакторинга си е за теб, той не сe оценява в judge. Какво значи двете решения да са заедно. Предполагам, че така ще имат доста дублирана data, ако си направил рефакторинг не ти трябва решение без рефакторинг. Рефакторинга е далеч по-добре.

    Ако дадеш линк, може да ти кажа нещо по-конкретно.

  

0
murkata86 avatar murkata86 10 Точки

10- та задача мога да е реша само с един клас Weapon и толкоз, но реших просто, че ще е по - добре да реша задачата, като използвам всичко научено до сега (не казвам, че е най правилното решение), като още в началото ги вкарам всите тези неща. Да рефакторинга не се оценява, но задачата, но това не ти пречи да ъплоуднеш рефакторираното решение в Judge.

 

https://onedrive.live.com/embed?cid=0215B22FCDC531A6&resid=215B22FCDC531A6%21493&authkey=AIdlyxRdKy1NGNI

 

Ето го моето решение на 10 задача + рефакторинг. Ако намериш папка без, която може всичко да работи перфектно - ще е направо супер. Пак казвам решението може и да не е най - доброто заради много класове за оръжия и гемс.

0
stambi4a avatar stambi4a 126 Точки

    Това което получавам като архиви е:

Пaпка Engine - 2kb , Пaпка Enum - 2kb, Пaпка Factories - 2kb,  Пaпка Interfaces - 13kb,  Пaпка Models - 17kb,  Пaпка UI - 1kb.

    Предлагам ти следните стъпки:

1. В папка interfaces махни всичко без IGem, и без това другите са празни. В папка Weapons оставяш само IWeapon.

2.В папка Models > Jewelry остави само Gem, Ruby, Emerald, Amethyst. Всичките производни на Ruby, Emerald, AMethyst се получават с 1 пропърти от тип Clarity което се инжектва в IGem.

    Сега Gem наследява IGem. Другите наследяват него.

    Правиш същото и за папка Weapons. Axe, Sword, Knife наследяват Weapon. Другите класове не ти трябват. В Weapon инжектираш property Rarity.

    Дотук при мен папката ти е вече само? 19 kb.

    По-нататък направеното дотук ще ти съкрати кода на GemFactory и WeaponFactory, 1 кб по-малко, стават 18.

    3. От Enums можеш да махнеш Gems, Weapons, Commands, Mulitplyier. Без тях вече си под 16 kb. Защо да ги махнеш? Ами, имена на класове не съм виждал да се използват в enum. Логиката по създаване на обекти може да се имплементира или с Reflection или директно използвай стрингове.

    Като цяло refactoringa не означава така да си разцепиш класовете, че за всяко нещо да имаш нов клас. При теб различните класове могат да се заменят с propеrty в 1 клас.

    Нещо допълнително кето забелязах, е че използваш прекалено много логика в weapon класа. AddGem, RеmoveGem и SwapGems не би трябвало да преизчисляват други prоperty-та. Ако спестиш от тази логика, можеш да спестиш още 1 kb.

    Като част от рефакторинга е да се направи отделен клас за изпъление на командите, който да си ги създава и да извиква техен метод за изпълнение. Може и отделен метод който да парсва инпута, commandInterpreter. Това обаче ще увеличи паметта.

     Използването на списъци не е препоръчително. Когато имаш уникални стойности използвай Hashset или речник за директен достъп по стойността(препоръчително). О(1) за достъп. Казвам това защото предполагам, че на изпита ще има bottleneck codeparts които ще трябва да се документират  и отстраняват. Тоест ако работим с готов отчасти код, което казаха в началото, че е вероятно, за да правим рефакторинг, може да има капани в него.

    Между другото накрая на Run на Engine печаташ всички оръжия, но това в действителност е грешка в условието. Като погледнеш нулевите тестове, ще видиш, че не се печатат.

    Поздрави.

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