Loading...
MilenGeorgiev avatar MilenGeorgiev -12 Точки

Някой би ли ми обяснил как работи този код на JavaScript?

Става въпрос за тази задача: https://judge.softuni.bg/Contests/Practice/Index/156#10

И за този код: https://pastebin.com/BJhWLUdm

 

Тествам я в judge и ми дава резултати, които не мога да схвана как точно се получават.

П.С.: Не питам как да реша задачата, просто ме интересува как работи.

 

Тагове:
1
Programming Basics
icowwww avatar icowwww 2792 Точки

2ред: цикъл от нула до края на масива от числа

{

3ред: Проверка дали остатъка след модулно деление на числото от масива завършва на 0, демек дали е четно.

          {4ред: влиза в горния случай, изкарва съобщение, че текущото число е четно число}

5ред:  Else на горната проверка

          {6ред: изкарва, че числото е грешно }

}

край

Повече от това не знам как :Д ако все пак има нещо питай по-конкретно

 

0
20/08/2017 18:31:59
MilenGeorgiev avatar MilenGeorgiev -12 Точки

По-конкретно ме интересува защо например на Test#6 ми дава 2 на изход? Откъде я взема тази 2-ка и защо?

0
20/08/2017 18:44:27
icowwww avatar icowwww 2792 Точки

Защото програмата разделя реда на масив от числа и гледа на всяко едно като отделно, а не прави проверка за целия инпут

За да ти даде 100/100 оправи първия ред на програмата да е без квадратните скоби за аргумента:

function enterEvenNumber(numbers) {

1
20/08/2017 19:54:04
MilenGeorgiev avatar MilenGeorgiev -12 Точки

Ще повторя въпроса си - ЗАЩО на Test#6 ми връща резултат 2?

Ще повторя и че НЕ ПИТАМ как да реша задачата, за да ми даде 100/100.

0
ognyan.penkov avatar ognyan.penkov 49 Точки

За да знаеш защо на Test#6 ти дава 2 на изход трябва да знаеш и какъв е входа, а иначе както вече ти обясниха програмата прверява всяко число от масива дали е четно и ако е четно печата Even number entered: числото, а ако не е печата Invalid number! Тоест. ако на входа ти подадат само едно число и то е 2 няма какво друго да ти изпечата.

0
21/08/2017 08:53:34
MilenGeorgiev avatar MilenGeorgiev -12 Точки

Всеки може сам да провери какви са входните данни на Test#6 на въпросната задача. В случая това са 

3464823
100
333

Доста си блъсках главата, но така и не успях да разбера защо аджъбъ на изхода ми дава 2.

0
ognyan.penkov avatar ognyan.penkov 49 Точки

Ами в такъв случай може би ще е добре да покажеш целия код, не само функцията която прверява дали дадено число е четно/нечетно.

0
kristina111 avatar kristina111 59 Точки

Вероятно в джъдж входът е масив от стрингове (ако не са стрингове, не виждам как може да завърти цикъла до дължината на първото число). И понеже при декларирането на функцията параметърът numbers си го сложил в [ ], for-цикълът ти върти през всички цифри само на първото число от всеки вход. Това, което виждаш като твои output в джъдж, според мен е последната четна цифра от първото число от входа (поне така изглежда).

1
21/08/2017 18:03:07
MilenGeorgiev avatar MilenGeorgiev -12 Точки

То това е целия код, няма какво друго да се проверява.

0
ognyan.penkov avatar ognyan.penkov 49 Точки

Пробвах го този код в джъдж и даде 14/100 точки, минава само тест №3 а ти дава 2 на изхода не само на тест №6 а и на №4 и №7 това са тестовете в които в първото дадено чилсо има 2-ка

тест №4 :

-2
5

тест№ 6:

3464823
100
333

тест №7

233323
31341
50
5

Което ме навежда на мисълта, че не четеш всички числа или че не ги парсваш към число а са си останали като текст както каза и kristina111 .

0
ognyan.penkov avatar ognyan.penkov 49 Точки

Задачата от линк-а които си дал към джъдж не се ршава с for цикъл а с while защото може да ти дадат като вход произволен брой числа и трябва да отпечаташ първото срещнато четно и да прекъснеш цикъла.

А за да ти обясним като хората от къде я взема тази двойка трябва да знаеш поне малко масиви и че string-a всъчщност е масив от char-ове(символи).

0
kristina111 avatar kristina111 59 Точки

Задачата може да се реши и с for-цикъл - кодът дава 100/100, само трябва да се махнат [ ] при декларирането на функцията. Но когато ги има [ ] (и се подаде масив от стрингове) реално for-a обработва само нулевия елемент. Дебъгнете с този инпут и ще видите:  ['3464823', '100', '333']

0
21/08/2017 22:45:41
ognyan.penkov avatar ognyan.penkov 49 Точки

kristina111 то може, ама ще стане грозен фор цикъл като не знаеш колко числа ще ти подадат.

0
icowwww avatar icowwww 2792 Точки

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

0
kristina111 avatar kristina111 59 Точки

icowwww Прав си, че нито автора знае какво пита, нито задачата е особено интересна, и си прав, че се обяснява едно и също. Но твоя отговор също се нуждаеше от пояснение, защото в момента му се разбира единствено това, че от аргумента трябва да се махнат квадратните скоби, за да работи кода!

1
MilenGeorgiev avatar MilenGeorgiev -12 Точки

Много добре знам какво питам и мисля, че съм го обяснил достатъчно ясно. За Ваше сведение още при втория си опит получих 100/100 точки, като махнах квадратните скоби при декларирането на самата функция. Още в заглавния си пост изрично съм упоменал, че не питам как да реша задачата, след това го повторих, ама явно трябва да го потретя и поNtтя, че не питам как да реша задачата.

 

Огняне, благодаря ти за желанието ти да ми помогнеш, но то явно е по-голямо от възможностите ти. Първо ми заявяваш, че трябва да знам какъв е входа на Test#6, при положение че и сам можеш да го видиш какъв е - той не е някаква скрита конфиденциална информация. Второ ми искаш целия код, при положение че в кода ми няма никакви индикации да липсва част от него. Трето ми даваш лъжлива информация, че задачата не може да се реши с for цикъл, а трябва непременно да ползвам while цикъл. Четвърто, все пак се съгласяваш, че задачата може да се реши и с for цикъл, ама щял да бъде грозен. А въпросният for цикъл си е съвсем обикновен и лесно четим, не знам какво грозно виждаш в него.

 

Благодаря и на Кристина, която ми даде отговора на конкретния ми въпрос, а именно че при този код judge ми връща последната четна цифра от първото число.

0
22/08/2017 14:44:30
icowwww avatar icowwww 2792 Точки

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

Въпроса дори не е толкова за задачата, колкото за това как джъдж работи. Все пак въпроса може би щеше да ме подсети какво питаш ако се споменаваше ТИ какво очакваш джъдж да изведе като отговор и какво всъщност извежда. При този въпрос направо бих цитирал джъджа:

 

1
22/08/2017 15:33:02
ognyan.penkov avatar ognyan.penkov 49 Точки

Да така е, възможностите ми относно JavaScript ги няма, явно не трябва да се бъркам в теми за джаваскрипт! А някои може ли да мипокаже решението с фор цикъл-а, което минава проверките в джъджа?

0
MilenGeorgiev avatar MilenGeorgiev -12 Точки

Както казах, решението, което дава 100/100 е почти същото като моето, просто махаш квадратните скоби от декларирането на функцията.

Вместо function enterEvenNumber([numbers]), пишеш function enterEvenNumber(numbers).

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