VS Code Проблем

Здравейте,

Искам да помоля за помощ.Опитах да си стартирам Node.js и VS code,но като въведа този код от примерната задача и получавам следното съобщение в output-a и не знам какъв е проблема.Някой може ли да ме насочи?

Здравей,

Проблемът тук не е във VS Code, той работи както трябва. За да разберем къде е проблемът, ще трябва малко по-детайлно да ти обясня как се работи с него и с Judge системата.

Ако погледнеш отдолу в output-а, VS Code ни казва:
Reference Error: gets is not defined.

Това е грешката, която имаш в кода ти. Тук програмата VS Code ти казва, че в твоя код има грешка и каква е тя - функцията gets не е дефинирана, а си се опитала да я използваш, което е невъзможно.

Причината е, че Judge системата автоматично знае каква е тази функция gets, разпознава я и я прилага, докато във VS Code такава запазена функция няма и съответно той не знае какво си му задала като команда. За да дефинираме и използваме gets (както и print) във VS Code, трябва да добавим най-отгоре на кода ни следното:

let print = this.print || console.log;
let gets = this.gets || ((arr, index) => () => arr[index++])(input, 0);

Не се притеснявай какво означават тези две линии код, това не е важно за момента. Важното е, че те ще ни позволят да използваме функциите gets и print във VS Code. По този начин ще симулираме как работи Judge системата на нашия локално инсталиран VS Code. И обратното, когато копираме решението на някоя задача от VS Code и го пускаме в Judge, ще изтрием тези две линии код, защото Judge автоматично използва функциите print и gets, така че не трябва ние да ги дефинираме.

Вторият проблем в скрийншота ти е, че няма input. Функцията gets взима първото парче от input-а първия път, когато я извикаме и всяко следващо - всеки следващ път. Тоест, ако има три линии в input-а, а ние извикаме gets 2 пъти, първият път ще получим първата линия от input-а, вторият път - втората, а третата няма да я получим никога. За да я получим, трябва трети път да извикаме gets. Тъй като ти не си сложила никакъв input, няма как функцията gets да вземе каквото и да е (дори самата функция да беше дефинирана и да работеше правилно). За да оправим този проблем, трябва да напишем най-отгоре на нашия код следното:

let input = ['example'];

В случая нашият input е просто пример, но при истинска задача, в този масив (пространството между квадратните скоби), ще копираме input-а от задачата в Judge, винаги като поредица от string-ове. Така отново симулираме как работи Judge, за да може да решаваме задачата локално на нашия VS Code. И по същия начин, когато пускаме готово решение в Judge, не копираме този input, тъй като Judge вече си има вграден input, който ползва.

С две думи - копирай тези три линии код и ги слагай най-отгоре на всеки файл, в който ще решаваш задача за Judge. Input-ът за всяка задача ще е съобразен със задачата, разбира се.

Надявам се, че това отговаря на въпроса ти.

P.S. Другото, което бих те посъветвал, е да инсталираш VS Code някъде другаде, а не директно в D: на компютъра. Вложи го поне още една папка навътре, например в Program Files.

Поздрави,
Зарко

1 Like

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

Здравей,

Копирай и изпробвай ето този код във VS Code:

let input = ['10',
'2'];

let print = this.print || console.log;
let gets = this.gets || ((arr, index) => () => arr[index++])(input, 0);

let w = +gets();
let h = +gets();

print(w * h);

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

На първата линия, дефинираме input и му задаваме две стойности - 10 и 2.

Двете стойности в input също са на две линии, поотделно. Това е важно, защото трябва да следваме условията на задачите в Judge, а тук във VS Code реално симулираме как работи Judge.

На третата линия дефинираме функцията print. Оттам нататък може да ползваме тази функция в кода си по-надолу.

На четвъртата линия дефинираме функцията gets. Оттам нататък може да ползваме тази функция в кода си по-надолу.

По-нататък чрез функцията gets взимаме веднъж w, което ще вземе автоматично първата стойност от input, а след това и h, което ще вземе автоматично втората стойност от input. Всеки път, когато извикаме функцията gets, тя взима последващата стойност от input.

След това просто принтираме резултата от умножението на w и h. Ако смениш числата в input горе, тази проста програма ще ти дава винаги правилното умножение между новите числа.

Тъй като това са доста основни неща, бих ти препоръчал да минеш отново изцяло през материалите ни, тъй като там всичко това е обяснено в детайли. Също така препоръчвам да влезеш в Дискорд групата на курсистите от подготвителния курс, където се водят оживени дискусии и където менторите биха могли да ти помогнат. Давам линк:

Discord group - Prep 46 JavaScript - Telerik Academy Forum

Поздрави,
Зарко