alinpiaa / js-assignments Goto Github PK
View Code? Open in Web Editor NEWThis project forked from rolling-scopes-school/js-assignments
Javascript assignments, tasks and katas
License: MIT License
This project forked from rolling-scopes-school/js-assignments
Javascript assignments, tasks and katas
License: MIT License
Math.pow(10, pow)
вычисляется дважды, обычно в таких случаях считают один раз и сохраняют в переменную.
Опять немного прямолинейно. Мне нравиться более простой вариант:
return new Date(endDate - startDate).toISOString().slice(...);
parseDataFromRfc2822 и parseDataFromIso8601 проходят тесты только потому что тесты кривоватые.
Функции просят вернуть объект Date, но возвращаются миллисекунды Эпохи, ибо Date.parse возвращает их.
Нельзя такое писать в одну строчку, пока поймешь что написано, то глаза сломаешь.
Тут логично на три строки разбить, чтобы все было один под одним, тогда с первого взляда будет понятно.
Есть готовая стандартная функция, которая делает то же самое.
По условию в теге угловые скобки только в начале и в конце, поэтому эффективнее будет использовать slice
, а не replace
findFirstSingleChar может быть реализовано за O(N), а не за O(N^2). Кроме того, str.indexOf(value)
выглядит не очень в цикле по символам, можно завести счётчик и не выяснять этого каждый раз.
reverseInteger — можно не гонять число в строку и обратно заиспользовав немного математики (остаток от деления на 10 даёт самую правую цифру, деление на 10 и округление сдвигает число вправо). То же и к getDigitalRoot.
В getDigitalRoot использован китайский цикл на 2. Не проходит тест, если передать, например, 991. Сначала получает 19, переходит к второму этапу, получает 10. Должно продолжить и получить 1.
isBracketsBalanced — слишком много дублирующегося кода.
Тут короче будет:
return value.slice(7, -1);
У slice довольно лаконичные аргументы, надо уметь этим пользоваться.
Неэффективное решение. Операции с числами всегда будут быстрее операций со строками.
RTFM https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder
Достаточно прямолинейное решение. Это задачка на строки, а не на массив. Можно попробовать чуть хитрее и эффективней:
return '♣♦♥♠'.indexOf(value.slice(-1)) * 13 + ...
getMovingSum имеет вычислительную сложность больше чем O(N) из-за просмотра массива от начала до текущего элемента каждый раз, как мы меняем элемент. Это можно сделать эффективнее.
В propagateItemsByPositionIndex я не понимаю, зачем в .fill(elem, 0, i*2+1)
передаются второй и третий аргументы, если нам нужно заполнить массив целиком. Более того, i*2+1
это больше, чем длина массива.
get3TopItems работает за O(N log N), может за O(3 * N) → O(N).
Можно не создавать лишний массив.. Ещё здесь, здесь.
Линейным поискам в массивах нужно предпочитать поиски в хештаблицах. Видел ещё здесь.
В getIdentityMatrix двойной map излишен, достаточно пройтись по диагонали, а не по всем элементам матрицы.
В distinct сложность O(N^2) вместо O(N) из-за постоянной пробежке по массиве при каждом элементе.
В этом модуле задачи не на математику, а на знание стандартных математических методов javascript :) Есть стандартный метод, с помощью которого это задание решается просто, не надо изобретать велосипед.
get99BottlesOfBeer — if (bottle == 1)
можно вынести за while сделав while (bottle > 1)
, if (bottle == 0)
тогда тоже пропадает, в цикле остаётся только два yield'а и один декремент.
Этот .pop можно сделать выше при присваивании, ничего не изменится, но на строку меньше.
getPolynom выглядит по-китайски. Не работает на тестах с четырьмя и более аргументами. Можно сделать универсальным.
memoize сразу же выполняет переданную функцию, должно только после первого вызова сконструированной.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.