Furniture (March 2014 - Evening) Exam Preparation - въпрос към някой минал през нея..


1

Часове наред е боря тази задачка и стигнах до най-неприятната ситуация в която контролният тест минава целия но не и БГ-Кодера - ако има някой с свеж поглед над задачата и по-разбираш да даде насока... БГ-Кодера ми дава 80/100 и от 2 часа не мога да направя нищо по въпроса за останалите 20...

ето и кода :

https://github.com/darkyto/FurnitureExamPreparation/tree/master/FurnitureManufacturer




Отговори



0
На мен пък тази задача ми гърми входа на авторското решение. Някой да знае защо?



0

Каква грешка ти дава? Залагам на FormatException - виж дали проблемът не идва от културата, ако да - я сетни на Invariant докато си тестваш локално (Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;). Ако не - сподели грешката, за да разследваме. ;)


от svetlai (1438 точки)

0

Вчера е оправих колежке, точно от културата беше :)




0

Провери ли по тестовете поотделно дали output-a ти е същия с искания, защото този курс май доста често се случва изпращаните от нас варианти да не са съвместими изцяло с bgcoder.Аз с тази задача нямах проблем, но на втората задача(Infestation) от този изпит ми правеше проблем и при еднакъв резултат сравнен с теста ми изкарваше грешен в кодера.


от baretata (934 точки)


0
Абсолютно 1 : 1 с input-а въвеждам входните данни и ми дава format exception в парсването на една от командите или по-конкретно - при парсването на масата.


0
Аз решавах Infestation и нямах проблеми. Метни един гит.

от kon.simeonov (5238 точки)



0

Не съм се задълбавал много, но дали е възможен варианта да ти подадат lenght или width отрицателни и да се очаква да се хвърли exception?

В условието не е писано, че трябва да се прави проверка, но може да го пробваш като вариант.

Друго, което има като проблем, е че isConverted има публичен сетър, като по условие единственият вариант да го променяш е през метода Convert().

Виждам и че в Table класът имаш публични сетъри на lenght и width, което също не трябва да е така. Веднъж зададени размерите на масата, не би трябвало да можеш после да ги буташ през сетърите (а и въобще).

Би било добре и Height пропъртито на Furniture класа да бъде protected, за да може да се бута само от наследниците. Иначе е достъпно за цялото асембли.


от nasko717 (180 точки)


0
добавих и проверки за width , length .. промених и сетъра на ИсКонвертед но и това не промени ситуацията..  

от divided.zero (692 точки)

0

Пробвай, ако имаш само един елемент как ти ги принтира. 

else if (this.furnitures.Count == 1)
            {
                sb.Append("1 furniture");
                foreach (var furn in furnitures)
                {
                    sb.Append(furn.ToString());
                }
            }

Тук може да е заради това, че нямаш нов ред и да ти ги събира на един.


от nasko717 (180 точки)


0

Целият ти проблем идва от каталога. Когато даваш append на "no furnitures" или на "1 furniture" след това трябва да им дадеш и нов ред, за да може output да ти е в този формат:

(company name) – (number of furniture/”no”) (“furniture”/”furnitures”)

(information about furniture)

(information about furniture)

(information about furniture)

В другите случаи минаваш тестовете, защото furnitures са повече от едно и ти тука му задаваш и нов ред: "{0} furnitures\n"


от dsd321 (553 точки)


0

не е и това.. новият ред си го има за "no furnitures" и za "1 furniture"

просто не е в каталог а в вградената функция на скелета на решението а именно

            foreach (var line in output)
            {
                result.AppendLine(line);
            }

Единствено при случаите когато има повече от един ред ни се налага да 

използваме нов ред (примерно 4 furnitures и след това нов ред и изброяваме всеки стол/маса)

Оутпут-а ми е едно към едно с тестовият.. и буква по буква и като начин на форматиране са абсолютно индентични.

Явно ми убягва нещо по-специфично - най-малкото защото ми гърмят последните два теста само!


от divided.zero (692 точки)


1

Още нещо, което забелязах - няма да има връзка  с тестовете в BGCoder, но трейнърите ще ти орежат точки, ако сме на изпит: променил си типа на пропъртито Material в интерфейса IFurniture, което по условие не е коректно. Аз лично решавам проблема с печатането по следния начин:

 public ITable CreateTable(string model, string materialType, decimal price, decimal height, decimal length, decimal width)
        {
            MaterialType materialEnum = GetMaterialType(materialType);
            return new Table(model, materialEnum.ToString(), price, height, length, width);
        }

Но може да се направят и допълнителни конструктури.. май? ..не съм пробвала за сега, не гарантирам че ще работи :) 
Иначе и аз още не съм добутала последните точки и ти благодаря, че пусна темата!  

Поздрави




1
Абсолютно съзнателно промених интерфейса и уви знам че това е нежелателно движение , но снощи така и не стигнах до по-елегантно решение..  днес ще пробвам твоята идея но мен повече ме притеснява не печатането а инициализирането в конструкторите.. ако направя всички конструктори с стринг (тръгвайки от базовия) то просто не успях да се сетя как да имплементирам енумерацията и затова ссе наложи "хаквам"

от divided.zero (692 точки)

1
Разбирам те, като цяло надали идеята е това, което съм направила, защото е меко казано малоумно.. предполагам трябва да се правят по 2 конструктура. Най-вероятно на подготовките, ще се решава тази задача и ще разберем :)
Успех и пиши като ги докараш до 100 :)




1

Най-добре си сравни аутпута със нулевия тест на DiffChecker.com за да видиш къде имаш точно разлика.Тестовете са направени така,че нулевия ако ти мине без разлика ,то и другите да минат. +/- 10 точки. Аз когато си коригирам изписването на конзолата,което е най-досадно и прецизно,след това нямам проблеми с задачите.

Дано откриеш бъга ;)


от IvayloAndonov (1994 точки)


0
Щом му минава нулевия, значи форматирането е коректно и аутпута е едно към едно с нулевия. BgCoder е чувствителен на запетайки и спейсчета, щом го пуска, значи всичко е наред по тази линия. И на мен ми минава нулевия,  DiffChecker-a също е съгласен, че са еднакви, но последните 30 точки бягат. Обикновено в този случай е време да се прочете условието отново :D 


0
МЕРСИ - Това е.. използвах друг чекер който не ми връщаше грешки но този показа разлика в отпечатването на резултатите.. по някаква причина печатам ПОВЕЧЕ нови редови когато вадя списъците от мебели... следобяд ще се впусна в издирване на конкретният бъг който го причинява

от divided.zero (692 точки)



0

Благодаря за насоките и коментарите колеги.. 

грешката се оказа в "хакването" от моя страна на интерфейса за MaterialType

след корекция и няколко рунда борба с начина да си стрингосам Материя-та се получиха заветните 100/100

актуализирах кода а ето и частта от кода която реши проблема

във [Furniture.cs]

        public string Material
        {
            get { return this.materialEnum.ToString(); }
            set 
            {
                this.material = value; 
            }
        }


от divided.zero (692 точки)


0

А някой ще ми обясни ли физическия смисъл на еднокракото столче. Защото от елементарна статика си слагам валидация за минимум 3 крака, която гърми :D

И един въпрос от мен. На какво може да се дължи разлика в output-а на solution-а в бгкодер и output-а в конзолата? В бгкодер слага паразитни празни редове, които ги няма на конзолата.

Screenshot:

http://tinypic.com/view.php?pic=2mopkpg&s=8#.VRl_YPyUdtk


от kalin.dimchev (645 точки)


7

Ми примерно:

:)

 

от svetlai (1438 точки)

0

от westi3m (5621 точки)