Някой би ли ми обяснил как работи този код на JavaScript?
Става въпрос за тази задача: https://judge.softuni.bg/Contests/Practice/Index/156#10
И за този код: https://pastebin.com/BJhWLUdm
Тествам я в judge и ми дава резултати, които не мога да схвана как точно се получават.
П.С.: Не питам как да реша задачата, просто ме интересува как работи.
По-конкретно ме интересува защо например на Test#6 ми дава 2 на изход? Откъде я взема тази 2-ка и защо?
Защото програмата разделя реда на масив от числа и гледа на всяко едно като отделно, а не прави проверка за целия инпут
За да ти даде 100/100 оправи първия ред на програмата да е без квадратните скоби за аргумента:
function enterEvenNumber(numbers) {
Ще повторя въпроса си - ЗАЩО на Test#6 ми връща резултат 2?
Ще повторя и че НЕ ПИТАМ как да реша задачата, за да ми даде 100/100.
За да знаеш защо на Test#6 ти дава 2 на изход трябва да знаеш и какъв е входа, а иначе както вече ти обясниха програмата прверява всяко число от масива дали е четно и ако е четно печата Even number entered: числото, а ако не е печата Invalid number! Тоест. ако на входа ти подадат само едно число и то е 2 няма какво друго да ти изпечата.
Всеки може сам да провери какви са входните данни на Test#6 на въпросната задача. В случая това са
3464823
100
333
Доста си блъсках главата, но така и не успях да разбера защо аджъбъ на изхода ми дава 2.
Ами в такъв случай може би ще е добре да покажеш целия код, не само функцията която прверява дали дадено число е четно/нечетно.
Вероятно в джъдж входът е масив от стрингове (ако не са стрингове, не виждам как може да завърти цикъла до дължината на първото число). И понеже при декларирането на функцията параметърът numbers си го сложил в [ ], for-цикълът ти върти през всички цифри само на първото число от всеки вход. Това, което виждаш като твои output в джъдж, според мен е последната четна цифра от първото число от входа (поне така изглежда).
То това е целия код, няма какво друго да се проверява.
Пробвах го този код в джъдж и даде 14/100 точки, минава само тест №3 а ти дава 2 на изхода не само на тест №6 а и на №4 и №7 това са тестовете в които в първото дадено чилсо има 2-ка
тест №4 :
-2
5
тест№ 6:
3464823
100
333
тест №7
233323
31341
50
5
Което ме навежда на мисълта, че не четеш всички числа или че не ги парсваш към число а са си останали като текст както каза и kristina111 .
Задачата от линк-а които си дал към джъдж не се ршава с for цикъл а с while защото може да ти дадат като вход произволен брой числа и трябва да отпечаташ първото срещнато четно и да прекъснеш цикъла.
А за да ти обясним като хората от къде я взема тази двойка трябва да знаеш поне малко масиви и че string-a всъчщност е масив от char-ове(символи).
Задачата може да се реши и с for-цикъл - кодът дава 100/100, само трябва да се махнат [ ] при декларирането на функцията. Но когато ги има [ ] (и се подаде масив от стрингове) реално for-a обработва само нулевия елемент. Дебъгнете с този инпут и ще видите: ['3464823', '100', '333']
kristina111 то може, ама ще стане грозен фор цикъл като не знаеш колко числа ще ти подадат.
Тук от 5ма коментирали, единия е автора, който и той не знае какво пита, а другите четирима пишат едни и същи ненужни отговори, защото не се гледат кой какво вече е написал по-горе. Поне да беше интересна задачата, засукана, дълга и тн. Тази не заслужава такова внимание
icowwww Прав си, че нито автора знае какво пита, нито задачата е особено интересна, и си прав, че се обяснява едно и също. Но твоя отговор също се нуждаеше от пояснение, защото в момента му се разбира единствено това, че от аргумента трябва да се махнат квадратните скоби, за да работи кода!
Много добре знам какво питам и мисля, че съм го обяснил достатъчно ясно. За Ваше сведение още при втория си опит получих 100/100 точки, като махнах квадратните скоби при декларирането на самата функция. Още в заглавния си пост изрично съм упоменал, че не питам как да реша задачата, след това го повторих, ама явно трябва да го потретя и поNtтя, че не питам как да реша задачата.
Огняне, благодаря ти за желанието ти да ми помогнеш, но то явно е по-голямо от възможностите ти. Първо ми заявяваш, че трябва да знам какъв е входа на Test#6, при положение че и сам можеш да го видиш какъв е - той не е някаква скрита конфиденциална информация. Второ ми искаш целия код, при положение че в кода ми няма никакви индикации да липсва част от него. Трето ми даваш лъжлива информация, че задачата не може да се реши с for цикъл, а трябва непременно да ползвам while цикъл. Четвърто, все пак се съгласяваш, че задачата може да се реши и с for цикъл, ама щял да бъде грозен. А въпросният for цикъл си е съвсем обикновен и лесно четим, не знам какво грозно виждаш в него.
Благодаря и на Кристина, която ми даде отговора на конкретния ми въпрос, а именно че при този код judge ми връща последната четна цифра от първото число.
В отговора ми просто се споменава това за квадратните скоби, тъй като автора не пита за решение камо ли за пояснение на решение.
Въпроса дори не е толкова за задачата, колкото за това как джъдж работи. Все пак въпроса може би щеше да ме подсети какво питаш ако се споменаваше ТИ какво очакваш джъдж да изведе като отговор и какво всъщност извежда. При този въпрос направо бих цитирал джъджа:
Да така е, възможностите ми относно JavaScript ги няма, явно не трябва да се бъркам в теми за джаваскрипт! А някои може ли да мипокаже решението с фор цикъл-а, което минава проверките в джъджа?
Както казах, решението, което дава 100/100 е почти същото като моето, просто махаш квадратните скоби от декларирането на функцията.
Вместо function enterEvenNumber([numbers]), пишеш function enterEvenNumber(numbers).