Loading...
akiprov avatar akiprov 20 Точки

Document Object Model - Number Convertor - Feedback

Умопомрачен съм от начина, по който се извършва тестването на нашите решения в Judge.
Пиша във връзка с поредна задача от това домашно и този път, най-накрая, успях да се натъкна на нулев тест, който ме светна какво всъщност се случва.

Проверките в Judge са толкова ограничени, толкова hardcode-нати, че ако студента не пусне точно това решение, за което написалия теста си е мислил, автоматично получава 0 точки.

Давам пример с въпросната задача от заглавието.
Първоначално я реших като зад всяка опция от падащия списък за целева бройна система сложих цяло число, което да представлява базата на съответната система (двоична -> 2, шестнадесетична -> 16):

<option value="2">Binary</option>
<option value="16">Hexadecimal</option>

Това прави последващи изчисления базирани на стойността на select menu-то много кратки и лесни. Но не би.
Видите ли, след като това прекрасно решение изгърмя тотално в Judge и погледнах нулевия тест, бях втрещен от това какво се търси.

<option value="binary">Binary</option>
<option value="hexadecimal">Hexadecimal</option>

Вместо да се възползваме от възможността да скрием числа зад етикетите "Binary" и "Hexadecimal", проверяващия очаква от нас да сложим същите символни низове като стойности на опциите. И по незнайна за мен причина те трябва да са не с изцяло главни, не с първа главна и останали малки, а с изцяло малки букви от край до край.
И разбира се, оттам нататък следват едни допълнителни switch-case или if-else проверки, едни parse-вания, за да може да продължим с калкулациите на базата на текст!?!

Къде е алгоритмичното мислене тук?
Защо хората, които се стараят да мислят и пишат практично, да се възползват напълно от всички удобства, които един език за програмиране им предлага, биват наказвани когато дойде време за оценяване на труда им?
Онзи ден колеги изразиха опасения от това дали ще могат да си вземат изпита. Склонен съм да се присъединя към тях. Ако тестовете към изпитните задачи са такива, спукана ни е работата.

Това не е първия курс в SoftUni, при който проверките на домашните в Judge късат нервите на студентите.
И аз за пореден път ще кажа, че щом тестовете не могат да бъдат написани така, че да приемат повече от 1-2 верни решения (а те понякога са дузина), то трябва Input и Output винаги да са видими за студентите.
Не може и не е редно да учим синтаксис в рамките на 4 часа и после в продължение на 40 да гадаем какво точно иска Judge от нас.

Криенето на изискванията не ни прави по-добри програмисти. Няма случай от реалността, в който клиент да дойде при нас и да ни каже "Искам да ми напишеш една програма, но няма да ти кажа кой и как ще я ползва. Ама ти почвай да пишеш...".
И не, условията на задачите за домашно не покриват всички възможни варианти и не могат да ни подготвят за абсурдни случаи като този описан по-горе. Да не говорим, че понякога и в тях има правописни и логически грешки.
И в тази връзка пускането на анкети се обезсмисля, защото тези неща не се променят с години.
Наскоро мой познат се записа в SoftUni. Преминавайки през същите курсове, които аз вече съм карал, се натъкна на същите стари грешки по условия и презентации, които си бяха там и през 2016г. Що за апатия е това? Как може един преподавател или асистент като види грешка в документ по време на презентация, да не посегне да я поправи и да запази промяната за идните курсове?

Тагове:
0
JavaScript Fundamentals
irensh avatar irensh 1 Точки

Здравей,

можеш ли да ми помогнеш. При мен всичко си работи супер, но в Judge-а гърми ииии наистина не мога да зацепя какво не му харесва.

 

function solve() {

let createOption = document.createElement('option');

createOption.value = 'hexadecimal';

createOption.textContent = 'Hexadeicmal';

document.getElementById('selectMenuTo').appendChild(createOption);

 

let options = Array.from(document.querySelector('#selectMenuTo'));

options[0].value = 'binary';

options[0].textContent = 'Binary';

 

Array.from(document.getElementsByTagName('button')).forEach(btn => {

btn.addEventListener('click', () => {

 

let input = +document.getElementById('input').value;

let resultInput = document.getElementsByTagName('input');

 

if (options[0].selected) {

//Conver from decimal to binary

resultInput[resultInput.length - 1].value = input.toString(2);

 

} else {

//Conver from decimal to hexadecimal

resultInput[resultInput.length - 1].value = input.toString(16).toUpperCase();

}

});

});

}

0
vdjalov avatar vdjalov 13 Точки

Разгледаитова решение: https://pastebin.com/JfP4edqK
 Гърмя на Virus Installera ако можеш да помогнеш с работещо за да видя къде мажа....
 https://pastebin.com/2ceqGr2G?fbclid=IwAR1CMhX74TiEMDKHQTBGZwaFik0lU-qeMt5TiJ7_qo3fnmd82b9YSvAMB48

 

0
akiprov avatar akiprov 20 Точки

@vdjalov Съветвам те да не променяш ръчно checked атрибута на радио бутони. Истинската стойност на всяка група от такъв тип не е видима и не е зависима от този атрибут - той не я променя. Аз лично я достъпвам с .value при нужда. Не съм 100% сигурен, но мисля че въпросния атрибут само указва кой радио бутон да е избран при първоначално зареждане на страницата преди всякакви cache-ове. С други думи, махни ги напълно тия onclick() събития от радио бутоните.

Виждам, че зачистваш фоновото изображиние само на първа стъпка/страница (clicks = 0). Не знам дали има тест, който проверява дали на всяка стъпка/страница освен първата има background-image, но за всеки случаи може да изнесеш тази промяна едно ниво по-нагоре - при всяко натискане на бутон [Next]. Работи, защото никога не натискаш бутона, за да заредиш началния екран.

Ето моето предложение за решение на тази задача: https://pastebin.com/wkq0fP3F

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

и двамата сте прегряли спрете се малко : да малко нелогично ние си вкарвахме Options 

ама чак пък parse и проверски 5 реда е : https://pastebin.com/pmbs08H7  а Judge си е judge от началото си е все така,малко магия.

0
terkan1994 avatar terkan1994 1 Точки

Благодаря за темата, помогна ми да си намеря грешката :)

Моето решение -> https://pastebin.com/9iBtAhKr

0
petarbelev avatar petarbelev 10 Точки

Здравей, много съм съгласен с теб, няма написано в нито едно условие как да си структорираме правилно кода, и въпреки че локално всичко е изпълнено, Judge ни застрелва с тор 33/100...

Малко информация на лекциите, малко задачи на упражненията. Ясно е че трябва сами да търсим отговори, но за чисто нов материал, нов език като DOM, мисля че трябва да ни обърнете внимание. Хубаво, намираме си как да скалъпим задачата, 'апликацията' работи, но тестовете не минават... На изпита ще е същото, и какво правим?

0
VaninaDimitrova avatar VaninaDimitrova 1 Точки

Аз повече от час се опитвам да разгадая къде в пресмятането на decimal to hex ми е грешката, какво ли не пробвах, накрая се оказа, че просто Judge иска когато си вкарваме опциите, "option value" да бъде "hexadecimal", а не "hex"...

Изумена съм.. и това не е първата задача, при която губя време за такива глупости.

 

0
snaikeee avatar snaikeee 54 Точки

Ако не беше тази тема и аз не знам как щях да се сетя че value трябва да цялото с малки букви

0
vib1336 avatar vib1336 0 Точки

Здравейте колеги, да не отварям нова тема ще ползвам тази. Кода работи според примерите в задачата, съдията дава 0 т. Като цъкна да видя техния input ми пише че трябва да получа 'yes', а пък в моя output пише: Unexpected error: Cannot read property 'addEventListener' of null. Като цъкна да видя какъв input вкарват пише, че конвертират 20 to binary и получават 10100, а при мен също се получава. Не разбирам къде бъркам и защо получавам 0 т. 

https://pastebin.com/BEbuCvQ2

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