Javascript и BgCoder


43

Здравейте,

Предстоят ви домашни (и изпити) на javascript. Оценяването ще бъде в bgcoder, което не е нищо ново. По интересното е как четете вход. Докато за изход може да използвате console.log, за вход нямате console.read или подобно. Кода, който пращате трябва да бъде функция приемаща един параметър - масив от стрингове, всеки от тях е ред от входа.

Submit-ите ви трябва да изглеждат така:

// НЕ ПИШЕТЕ НИЩО ТУК function solve(args) { // ваш код } // НЕ ПИШЕТЕ НИЩО ТУК

По този начин args е гореспоменатия масив.

Ето пример:

Подават се 2 числа, всяко на отделен ред, изведете техния сбор и произведение на отделни редове. Код:

// НЕ ПИШЕТЕ НИЩО ТУК function solve(args) { var a = +args[0], // cast string to Number b = +args[1]; // cast string to Number console.log(a + b); console.log(a * b); } // НЕ ПИШЕТЕ НИЩО ТУК

Разбира се, може да използвате тази функция, за да си тествате решението:

// НЕ ПИШЕТЕ НИЩО ТУК function solve(args) { var a = +args[0], // cast string to Number b = +args[1]; // cast string to Number console.log(a + b); console.log(a * b); } // НЕ ПРАЩАЙТЕ ДОЛНИТЕ РЕДОВЕ В BGCODER solve(['3', '5']); solve(['11', '4']); solve(['17', '17']);

В крайна сметка събмитите трябва да съдържат само една функция, да няма нищо извън нея, а вашия код да бъде вътре. Ако не, bgcoder ще ви дава грешка от типа на:

C:\Windows\TEMP\tmpECDC.tmp:84 var result = code.run(inputData); ^ TypeError: undefined is not a function at Socket.<anonymous> (C:\Windows\TEMP\tmpECDC.tmp:84:23) at Socket.emit (events.js:129:20) at _stream_readable.js:908:16 at process._tickCallback (node.js:355:11)

Поздрави




Отговори



4

Деклариране с let ми дава runtime error-и. Може би аз правя нещо не както трябва естествно, но на някой колега може да е полезно.

Благодаря за подробното описание на процеса.


от todorovh (2055 точки)


1
На този етап, може да си компилираш ES6 кода с Babel или Traceur. Babel обхваща много голяма част от ES6, ако не и целия.


6
Текущата версия на node, която bgcoder ползва, не подържа ES6. let е от ES6.

от cuki (7696 точки)


0
Да супер е описано правя точно това но ми дава Runtime error на всички тестове. Какъв е проблема?

от k_yankov77 (4 точки)


0
Покажи кода.

от suzunov (321 точки)

0

function solve(args){
    var num = parseInt(readline());

    if (num%2===0){console.log("even");}
    else {console.log("odd")};
}

/*Този например за първата задача*/


от k_yankov77 (4 точки)



0
Тъй като преди не съм предавал домашно в BG Coder, aко съм разбрал правилно, предаването на домашно става след избереш "Active contests" => "Practice" след което предаваме решенията на задачите ?

от monsterEnergy (954 точки)


1
Избираш "Compete"... Practise е за тренировка само :-)

от jorosoft (945 точки)

0
Тогава един друг въпрос - тук в системата как се отчита, че домашното е направено в BG Coder ?

от monsterEnergy (954 точки)



0

Моля за малко помощ, не разбирам защо кода ми не се приема от системата. Събмитвам следното:

function solve(args) { var n = args.split([""]).reverse(); if(n[2]==7){ console.log(true); } else if(n.length<3){ console.log(false + ' ' + 0); }else { console.log(false + ' ' + n[2]*1); } }


от piperche (296 точки)


0

space между кавичките на ред 2? :)

Едит: глупости говоря , получаваш array от string-ве , директно индекса


от Betastate (341 точки)

0

Би следвало да се изпише:

var n = args.split('').reverse() или

var n = args.split(' ').reverse()


от monsterEnergy (954 точки)



0

А тази функция:

function solve(args) { var str = args.split(' '); }

... защо дава Runtime Error в BgCoder (само за сведение - в Node.js на компютъра ми и в браузъра си работи)?

Както се вижда - функцията не е много сложна ;) за да има много къде да се сгреши.

Т.е. функцията не прави нищо друго, освен да раздели аргументите по Space в един масив str. Но като се опитам да ползвам методът Split - отива на Runtime Error.


от mitku (334 точки)


1

Защото args е масив трябва да направиш var str = args[0].split(' '); 

Но това за коя задача е не помня да трябва да сплитваме нещо


от Merhatt (1406 точки)

0

ОК. Това ми отговаря на въпроса... мислех, че args е стринг разделен с паузи и аз трябва да го направя на масив със стойностите, които задава. А той бил готов масив, който просто да адресирам. То трябва и винимателно да се прочете какво пише по-горе, но нейсе. Някой и друг час тестове спестяват 1-2 минути за прочитането на упътването по-горе. :)

Иначе - не е по конкретна задача. Тествам генерално как да парсвам входа за всички задачи.


от mitku (334 точки)


0

Искам да попитам за третата задачи дали така ще се получи:

function solve(args) {
var width = +args[0]
height = +args[1]; 

console.log("Rectangle perimeter is: " +(2*width+2*height));
console.log("Rectangle area is: " + (width*height));
}

Пробвам за пореден път и вече не знам как да го направя. Ако може малко помощ или насока ще съм много благодарна :)




0
Погледни хубаво в условието как трябва да се дава изхода. Никъде не пише "Rectangle ..." и също така 2-те числа трябва да са на един ред, разделени с шпация.

от cuki (7696 точки)

0

Трябва да изпишеш следното за резултат:

console.log(area.toFixed(2) + ' ' + perimeter.toFixed(2));

а действията се извършват в променливите area и perimeter


от monsterEnergy (954 точки)


1
Не можахме да изтрием Цъки в лекцията на Коцето, ама той се оказа полезен :) 

от slganev (126 точки)


2
Доста съм персистентен!

от cuki (7696 точки)


0

Кой е най-добрият начин да се тестват и дебъгват задачите? Има ли по-добър начин от това кода да се запише в js файл и да се тества през Хром. Например някакъв туул/плъгин който да симулира конзола за VS Code или Webstorm?


от stoil2 (102 точки)


0
Мисля че ако инсталираш NodeJS в WebStorm може да имаш нещо като конзола и дебъгер.

от dmilkovski (15 точки)


0

Имам проблем с едната задача (Third Bit) - с този код ми дава, че само някои от отговорите ми са верни(63/100). Не знам защо, в node си работи с дадените примери а и с положителните числа, които му задавам:

function solve(args) {
    var a = +args[0];
    var digit = a.toString(2);
    var check = digit.length - 3;
    if(digit.length < 3) {
    return 0;
    }
    return digit[check];
 }


от ModestX (0 точки)


0
Колега има отделна тема за тази домашна. В случея 3тия бит го взимаш като извадиш 4 от дължината на стринга. Ето така работи:
function solve(args) { var a = +args[0]; var digit = a.toString(2); var check = digit.length - 4; if(digit.length < 4) { return 0; } return digit[check]; }





от Doubleshot (429 точки)


0

Здравейте, 

Не мога да разбера как да събмит-на решенията към "05. Conditional Statements" в BGCoder.

За предходното домашно ("04. Operators and Expresions") изпозвах от github линковете към всяка задача, които ме препращаха към съответната задача в BGCoder, въвеждах си решението и всичко беше наред.

Сега обаче в описанието на домашното за "05. Conditional Statements" няма линкове за директно събмит-ване,  а в самия BGCoder на най-долния бар, от който би трябвало да избера по коя задача ("Problem") да работя, брояча стои на "0" и не може да се промени чрез стрелките наляво-надясно..

Моля, кажете как да събмит-на решенията в този случай!

Благодаря!

п.п.: Още един въпрос да попитам тук, да не отварям друг пост. Ако в дадено домашно не се направи някоя задача, считат ли се останалите задачи за направени или цялото домашно се счита за непредадено? Вчера не ми остана време за последната 9-та задача на първото домашно, но другите 8 са ми 100/100 направени.


от Campo (85 точки)


1

В Бг кодер като цъкнеш на определеното състезание има опция за участие и практика (или само участие). Цъкаш на участие и ти дава опции със задачите, на които да събмитваш кода. 

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


от DanielNikolov (359 точки)

0

Благодаря, намерих къде са точките и класиранията!

Но за по-важния проблем със събмит-ването нещо не се получава.  Ето скрийншот : 

Не знам дали съм на правилния екран, но тук не ми дава да избера номер на Problem :(


от Campo (85 точки)