[Exam Problems] JavaScript Basics - Prices Trends - проблем със задачата
Здравейте, искам да попитам защо с този код ми дава само 70/100 точки, не разбирам къде точно ми е грешката. Също така искам да съобщя, че проверката на тази задача в Judge системата е развалена (ще видите промяната и в моя код). Накрая затварящия таг по принцип е </td></tr>, но прави проверка с </td></td>. Дори авторскоро решение дава 0/100 точки. Става въпрос за 1-ва задача от теста на 29 юли. Благодаря предварително. :)
Има ли начин да погледна скритите тестове какви са ? Не знаех.
Разбира се - след като минат изпитите скритите тестове вече са публични - качват се заедно с условията на задачите в съответния курс.
Ето линк да си ги изтеглиш:
https://softuni.bg/trainings/coursesinstances/details/4
Супер, много ти благодаря!
Аз по тестовете не мога да се ориентирам нещо. С предварително вкарване на невалидна стойност за първата цена и след това проверки дали не е невалидна текущата или съответно надолу по flow-а равна, по-малка или по-голяма изкарвам 100. Като гледам обаче входните данни на тестовете, които ми гърмят без такъв такова присвояване - няма невалидни стойности. Т.е. не мога по нормалния начин по време на цикъла да проверя за празна стойност и да continue. Обаче ми изкарва, че 5 > 342.33? Кажи, ако си си намерил грешката :)
Нещо изпуших от толкова джаваскрипт. Гледам авторското решение, пуснал съм console.log на prevPrice и priceStr. Като пусна входа от 9тия тест виждам, че последните две са 5.00 и 342.33. Като пусна prevPrice > priceStr в console.log - вади false, както си трябва.
С решението на колегата при console.log на числата, отново показва 5.00 и 342.33, само където връща true проверката дали 5.00 > 342.33
Проблема му идва от това, че сравнява стрингове, а не числа - т.е. сравнява ги лексикографски. Първо добре ги е обърнал в числа, но след това за да ги закръгли до втория знак след запетаята е направил:
for (var number in numbers) {
numbers[number] = numbers[number].toFixed(2);
}
и съответно числата отново са станали стрингове.
От там вече е ясна работата - 13.00 е по-малко от 2.25 лексикографски:
<tr><td>2.25</td><td><img src="up.png"/></td></td>
<tr><td>13.00</td><td><img src="down.png"/></td></td>
Първо трябва да направи сравненията, след това да закръгля и печата резултата.
Има един доста удобен инструмент който много бързо ме оринтира къде правя грешки в джъджа - DIFF CHECKER. А сега по същество. Аз също имам такъв проблем. Още от началото си парснах всичко до float, но с огромно учудване разбрах по късно че не работи. Неразбирам защо, след като изрично съм го парснал (или поне така си мисля). А и в интерес на истината има доста хора с по 70 точки. Това е моят код.
П.П. В задачата има и друга грешка в редовете. трябва да е <tr>..</tr> а не <tr>..</td>
Салих,
твоята грешка е същата:
num1 = parseFloat(num1).toFixed(2);
num2 = parseFloat(num2).toFixed(2);
с този код ти първо парсваш числото към float и веднага след това го обръщаш закръглено до стринг. След това при сравнението, вече сравняваш стрингове лексикографски.
Ако промениш кода така /малко тъпо изглежда, но работи, т.е. парсваш, закръгляш и пак парсваш към float/:
num1 = parseFloat(parseFloat(num1).toFixed(2));
num2 = parseFloat(parseFloat(num2).toFixed(2));
ще ти даде 100 точки
ПС. А иначе diff checker-a е доста полезен при сравнение на голям обем output, в който трудно може да намериш разликите с просто гледане.
Не се бях замислил но и не се учудвам, все пак говорим за JavaScript . Искренни благодарности и успех на изпита.
Салих, снощи пропуснах да ти кажа, но още един съвет - слагай точка и запетая в края на кода :)
Успех и на теб на изпита!
@ a.angelov адмирации :) грам не ми мина през акъла, че ги обръща отново към стрингове
@ RoYaL - да не ти показвам скрийншот от judge да видиш колко проби/грешки ми трябваха при решаване на пъвите няколко задачи от изпитите, докато схвана, че работя с грешен тип данни