[JS OOP] Домашно 1. Function Expressions


7

Въпреки че бях на лекцията, на която Цъки обясни как се предават домашните в този курс, пак ми отне известно време докато накарам BGCoder да приеме кода ми. Ако някой друг се чуди какво се търси като резултат, ето task1 ,  task2 .

Както ще видите, в GitHub папка tasks в домашните има файлове с начален код, в които да пишем решенията.

function sum() { } module.exports = sum;

BGCoder очаква return на тази начална функция да е функция, която приема параметрите от заданието, например return solve(numArr). Редът module.exports = sum; не се предава в BGCoder.

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

Едното решение, което Цъки показа на лекцията, е да се редактира файловете tests-task-1.js и tests-task-2.js , като се добавят скоби около стойността на solve, така че да очаква израз: var solve = (require('../tasks/task-1'))(); 

Другият вариант е началната функция да приема параметрите от заданието и да връща стойност, а не функция. Така тестовете работят, но BGCoder дава run-time error. Затова преди да се предаде там, трябва да се направи началната функция да връща функция. На мен лично този вариант ми беше по-удобен, защото така знам как да дебъгвам в VSCode.

Как подкарваме примерните тестове?
  1. Инсталирали сме node & npm (Node Package Manager)
  2. Клонираме GitHub repository на курса 
  3. Копираме цялата папка homework в наше си repo (ако имаме такова)
  4. Отваряме конзолата в тази папка с Ctrl+Shift+ right click > Open command window here
  5. Инсталираме package.json с команда npm install
  6. Пишем пишем пишем код във task-1.js & task-2.js
  7. Пускаме тестовете в конзолата с команда npm test

Edit: Вече е качено видеото с обяснението за домашните - линк




Отговори



0
Благодаря за обясненията. Все още не може да се предават домашни, нали?



1

Да, в момента е възможно само в 'practice mode' да се предават.

Когато пуснат compete mode, ще трябва отново да се submit-нат, за да се получат точки за домашното, но пък в practice mode може да се тества дали решението е 100% вярно.


от nhristova (506 точки)


0
За да се направи клонрането трябва да имаме регистрация в Github, доколкото разбирам?

от peter_85 (279 точки)


1
Не е задължително. Или се използва графичния клиент на githubи тогава трябва регистрация, или се инсталира git на PC-то и от там вече се ползват команди в терминал, примерно, за клониране, пушване, пулване и т.н. А може и костенурката - Цък.

от olebg (598 точки)

0
GitBash същите команди ли ползва като cmd или има различия? Пробвах примено cd.. но не го разпознава. Иначе пък dir и cd dir работят.

от peter_85 (279 точки)


0

Здравейте, 

Когато submit-вам решението си на Task 1 получавам следното съобщение : "Решението е в опашката и скоро ще се изпълни. Моля бъдете търпеливи." . Същевременно от менюто резултати, забелязах, че има хора, които успешно са предали домашните. Някой друг има ли подобен проблем в BGCoder? 


от MonikaTzenova (110 точки)


0
Резултатите са на хора от предишни издания на Академията. Домашните са горе-долу едни и същи.

от martinboykov (1112 точки)

0
Ахам ясно :) Проблема се е оправил, излишно се панирах :D

от MonikaTzenova (110 точки)


1

 Който иска да дебъгва в  VSCode тези задачи, може да го прави като тества например по следния начин функциите :

console.log(solve()([5,7])); за първа задача параметъра е един масив,

console.log(solve()(0, 5)); за втора задача се подават два параметъра,

Иначе имате избор вътрешната функция дали да я дефинирате със или без параметри и да ги обработите в тялото и.


от dobri19 (45 точки)


0

Колеги, не знам дали е само при мене, ама, с този Javascript направо ми иде да си заритам компютъра :D Крайно ме нервира. Решения, които си тествам във VS Code и работят, не мога да ги накарам от половин час да изкарат нещо адекватно с мока тестовете, а в бгкодер изкарвам 33/100. Това за втора задачка, ето кода.Конкретно гледам първите 2 теста, на които при мен излизаат верни отговори, в моката излиза

1) Tests for "Task 2" expect solve(1, 5) to be equal to [2, 3, 5]: Error: the string "Error" was thrown, throw an Error :)

А ето го моя код

function findPrimes() { return function (numbers) { if (numbers.length === 1 || Number.isNaN(Number(numbers[0])) || Number.isNaN(Number(numbers[1]))) { throw 'Error'; } let result = [], counter = 0; for (let i = numbers[0]; i <= numbers[1]; i += 1) { for (let j = numbers[0]; j <= i; j += 1) { if (i % j === 0) { counter += 1; } } if (counter > 1 && counter <= 2) { result.push(i); } counter = 0; } return result; }; }

А в бгкодер излиза 33/100


от olebg (598 точки)


0
Здравей колега, началото на фукцията трябва да ти изглежда така 
  1. return function(numbers) {
  2.         numbers[0] = +numbers[0];
  3.         numbers[1] = +numbers[1];
  4.         if (numbers.length !== 2 || isNaN(numbers[0]) || isNaN(numbers[1])) {
  5.             throw 'Error';
  6.         }
защото иначе ако ти подаде стрингове от "2" ,"5" правеше безкраен цикъл , трябва да се парснат ,промених ти и проверката за isNaN  сега остава да си донагласиш логиката надолу защото като подадеш ['2','5'] изкарва числото 4 , което дори не е просто . Забравих да добавя че ще е по-лесно да въртиш вътрешния цикъл до корен квадратен от числото , ето и код за bgCoder ако искаш да погледнеш click

от vaskoelenkov (279 точки)

0
 Един страничен въпрос, някакъв вариант за сваляне на слайдовете може ли да подскажете?

от dobri19 (45 точки)



0
Може да се дублирам (някакъв негативити филтър ако е имплементиран при събмитването на нови постове), но ако може някой от екипа да обясни защо в бгкодер е направено така че да си чупим главата няколко часа?

от tinman (481 точки)


0

Според мен, във видеото Цъки добре обяснява как да предаваме домашните за този курс.

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


от nhristova (506 точки)


0

Всички локални тестове на 2те задачи минават за 10ms. Събмитвайки на BGcoder обаче получавам Лимит Време на всички тестове. Някой с подобен проблем? Ето примерно кода на първа задача:

function solve() { return function sum(numbers) { if (numbers === undefined) { throw 'You must provide arguments' } if (numbers.length === 0) { return null } if (numbers.some((x) => /[^0-9]/.test(x))) { throw 'All arguments must be numbers' } return numbers.reduce((x, y) => Number(x) + Number(y), 0) } }


от didexe (122 точки)


0
Преполагам е заради throw.ването на Еръри. Мене това ме отказа в един момент от тая одисея

от tinman (481 точки)

-1

Ам... извинявай ако греша, но с кода на ред 9 не тестваш ли дали има число в масива вместо да тестваш дали някоя от стойностите не е не-число? С (x => isNaN(x)) няма ли да е по-ок?


от nhristova (506 точки)