Skip to content

Instantly share code, notes, and snippets.

View PetukhovArt's full-sized avatar
:electron:
Workinnn 😉

Artem Petukhov PetukhovArt

:electron:
Workinnn 😉
View GitHub Profile
// Есть массив чисел
// Нужно выяснить есть ли в нем 2 числа сумма которых равна 18.
// сделать одним циклом
// два цикла O(n²)
function checkSum1(arr, sum = 18) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (j !== i && arr[i] + arr[j] === sum) {
return true;
// написать функцию банкомат, которая принимает на вход кол-во денег для возврата и лимиты купюр в банкомате
// должна вернуть объект с минимальным кол-вом купюр, чтобы разменять данный total
// перед возвратом значения, мы должны смутировать limits
// чтобы при последующем вызове функции atm, кол-во оставшихся купюр в банкомате изменилось
// если банкомат не может выдать сумму, то мутацию limits не делаем и возвращаем строку "cant change"
function atm(total, limits) {
const bills = Object.keys(limits)
.map(Number)
// Дан массив банкнот определенных номиналов
// [1, 2, 5, 10, 20, 50],
// их количество не ограничено.
// Нужно выдать ему эти деньги используя минимальное количество купюр.
// reduceRight simple
const getCash1 = (bills, total) => {
let totalRemain = total;
return bills.reduceRight((acc, bill) => {
// Есть парочка функций, которые необходимо запустить параллельно
// а результат вернуть только тогда, когда обе они будут завершены
const fnA = (cb) => {
setTimeout(() => {
cb("a");
}, 3000);
};
const fnB = (cb) => {
// Нужно модифицировать метод fetch,
// добавив ему возможность автоматической переотправки запроса в случаи ошибки
const fetchMockReject = () => {
return new Promise((_, reject) => {
setTimeout(() => {
reject("timeout error");
}, 1000);
});
};
// Нужно написать свой собственный метод debounce
function debounce(fn, timeout) {
let timeoutId = null;
return (...args) => {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
if (typeof fn === "function") {
fn(...args);
// Нужно написать функцию, которая проверит читается ли строка одинаково в обоих направлениях
// (без учета пробелов и знаков препинания)
// попробуйте решить несколькими способами
const isPalindrome1 = (str) => {
const punctuation = ' ,.;'
const arr = str.toLowerCase().split('')
.filter(ch => !punctuation.includes(ch))
const reversedArr = arr.toReversed()
let result = true
// условия :
// если исчерпали попытки, то throw последнюю ошибку
// retryCount - количество попыток ретрая при не успехе
// timeoutMs - таймаут, если не успевает разрешиться промис, то абортим запрос
// 1 решение через рекурсию
// Если количество попыток (retryCount) будет очень большим,
// это может привести к переполнению стека вызовов, лучше использовать цикл
function retryFetch1(url, { retryCount, timeoutMs }) {
return new Promise((resolve, reject) => {
const fetchMock = (endpoint) => {
console.log("fetched --> " + endpoint);
// 'fetched' '/3000'
// 'fetched' '/error'
// 'fetched' '/2000'
// 'fetched' '/500'
// 'fetched' '/600'
const ms = Number(endpoint.slice(1));
const fetchMock = (delay) => {
return new Promise((resolve) => setTimeout(() => resolve(delay), delay));
};
const promiseAll = async (promises) => {
return new Promise((resolve, reject) => {
const results = [];
promises.forEach((promise) => {
promise
.then((res) => {