{ сумма: счётчик }, сколько раз каждая сумма встретилась на всём диапазоне 000..999 (для n = 6, т.е. половина = 3)function getLuckyTicketsCount(n) {
const sums = {};
for (let i = 0; i < Math.pow(10, n >> 1); i++) {
// посчитать сумму цифр
let sum = 0, d = i;
while (d > 0) {
sum += d % 10; // прибавили младшую цифру
d = Math.floor(d / 10); // сдвинули число вправо на 1 цифру
}
// и в словарь прибавить 1 для этой суммы
sums[sum] = (sums[sum] || 0) + 1;
}
return Object.values(sums) // счетчики суммм
.map((n) => n * n) // квадраты
.reduce((acc, c) => acc + c); // сложить все
} В чём отличие от присваиваниятолько в том, что сохранили значение, которое возвращает вызов. Для этой функции это значение некий уникальный id, по которому, при необходимости, можно отменить вызов черезa = requestAnimationFrame(anim)и от обычного вызоваrequestAnimationFrame(anim)?
cancelAnimationFrame(), но в приведённом коде это значение никак не используется.Почему идёт каждый раз вызов функции anim()Первый раз потому, что в конце кода стоит вызов requestAnimationFrame(). Последующие — потому, что в конце очередной отработки anim() есть вызов a = requestAnimationFrame(anim); при условии, что счётчик не превышен. ts транспилировать, если прикрутить соотв. примочку. Например, про WebPack в документации TypeScript, или про TypeScript в конфигурации Vite (умеет из коробки). const foo = function(arg) {
return arg > 2;
}function mapper(array, func) {
return array.map(func);
}
mapper([1, 2, 3], foo);(arg) => arg > 2;почти то же самое, что определение функции foo() выше. .then(onFulfilled, onRejected)вторая функция «ловит» ошибку и обрабатывает её, поэтому выполнение не прерывается..catch() в конце цепочки.// ...
, function(reason) {
console.log(reason); // Ошибка! (Тут Скрипт должен прервать дальнейшее выполнение!)
return Promise.reject(reason); // передаём пас с ошибкой дальше по цепочке
})и всё равно добавьте в конце блок .catch() function test() {
// ...
}
const code = test.toString(); // код функции
// TODO: убрать всё снаружи if { }
code.match(/count/g).length // сколько раз используетсяlet count применить defineProperty, где в своих getter и setter считать обращения. Object.fromEntries(Object.entries(arr.reduce((acc, c) => (acc[c] = (acc[c] ?? 0) + 1, acc), {})).filter((pair) => pair[1] > 2)вернёт объект {значение: счётчик} из элементов, которых «больше 2 шт». Для примера в вопросе вернёт {1: 3}, т.е. «единиц — было три»reduce()'ом проходим по массиву, собирая словарь, где ключи – уникальные значения из массива, а значения – счётчики, сколько раз каждое встретилось.[ключ, значение]; фильтруем, оставляя только те, где значение > 2, и снова собираем в объект.\D("a2-9f-gg-7232").replace(/\D/g, "")
// "297232"В браузере — работает.\D обозначает «всё, кроме цифр»\d, для сравнения, как раз означает любую цифруg флаг от слова global, искать не до первого совпадения, а по всей строке.