К основному содержимому
Библиотека обучения · практика и теория

Практика

Задачи, подборки и прогресс в одном спокойном учебном потоке.

2 778
материалов
По популярностиБез фильтров

2. findMinMax

Реализуйте findMinMax(arr): верните объект с собственными полями min и max, содержащими наименьшее и наибольшее значения массива.

arr - массив конечных чисел JavaScript, возможны повторы, отрицательные и дробные значения. Для одного элемента оба поля равны этому элементу. Для пустого массива оба поля присутствуют со значением undefined.

Функция возвращает объект без вывода в консоль; порядок его полей значения не имеет.

Пример

findMinMax([3, 1, 4, 2]) // {min: 1, max: 4}

1. Функция возвращает другую функцию, которая всегда возвращает строку "HelloWorld"

Создайте функцию, которая при вызове возвращает другую функцию. Эта вложенная функция должна принимать любые аргументы, но неизменно возвращать строку "HelloWorld".

Степени чисел списковым включением

Реализуйте generate_powers(), возвращающую плоский список степеней каждого числа от 1 до 4: сначала степени 1, 2, 3 числа 1, затем те же степени числа 2 и так далее. Используйте одно списковое включение (list comprehension). Каждый вызов возвращает новый список.

Сигнатуры

def generate_powers():
    ...

Пример

generate_powers()
# [1, 1, 1, 2, 4, 8, 3, 9, 27, 4, 16, 64]

Эмиттер

Задача: Реализовать класс EventEmitter, который позволяет подписываться (on), отписываться (off) и вызывать (emit) события с передачей аргументов.

Генератор первых чисел Фибоначчи

Реализуйте генератор fibonacci(n), последовательно выдающий первые n чисел Фибоначчи, начиная с 0,1. Каждое следующее число - сумма двух предыдущих. n - целое от 0 до 1000; при нуле генератор пуст. После n элементов он завершается; экземпляры независимы.

Сигнатуры

def fibonacci(n: int):
    ...

Пример

list(fibonacci(7))
# [0, 1, 1, 2, 3, 5, 8]

1. Add Two Promises

Постановка задачи:

Даны два промиса, возвращающих числа. Необходимо написать функцию, которая возвращает новый промис, резолвящийся в сумму результатов этих двух промисов.

7. sumOfNumber

Постановка задачи:

Реализовать функцию, которая принимает целое число и возвращает сумму его цифр. Отрицательные числа должны обрабатываться как положительные. Например, 123 превращается в 6, а -987 в 24.

Пропущенное число (Missing Number)

Дан список nums из n различных целых чисел из диапазона [0, n]; ровно одно число диапазона пропущено. Реализуйте missing_number(nums), которая возвращает это число.

  • 0 <= n <= 10^5; для пустого списка ответ 0.
  • Порядок чисел произвольный.

Пример

missing_number([3, 0, 1])  # 2
missing_number([0, 1])     # 2

3. removeEvenIndexedElements

Реализуйте removeEvenIndexedElements(arr): удалите из переданного массива элементы, стоявшие на четных индексах исходного массива: 0, 2, 4 и так далее.

Индексация начинается с нуля. Сохраните порядок элементов с исходными индексами 1, 3, 5 и так далее. Элементами могут быть любые значения JavaScript; плотный массив не содержит пропущенных индексов.

Измените сам входной массив и верните ссылку на него. Не заменяйте элементы-контейнеры копиями. Для пустого входа верните тот же пустой массив; единственный элемент удаляется. Печатать внутри функции не требуется.

Пример

const arr = ['A', 'B', 'C', 'D', 'E'];
removeEvenIndexedElements(arr) // ['B', 'D'], и arr теперь также ['B', 'D']

1. Факториал

Постановка задачи:

Реализовать функцию для вычисления факториала числа n. Факториал определяется как произведение всех целых чисел от 1 до n, а факториал 0 равен 1. Решение должно быть представлено в трех вариантах:

  • Итеративный способ с использованием цикла.
  • Рекурсивный способ.
  • Использование метода reduce для функционального подхода.

Рекурсивная сумма вложенных массивов

Напишите функцию sum, которая принимает массив чисел, в том числе содержащий вложенные массивы, и возвращает сумму всех чисел в массиве. Для обработки вложенных массивов используйте рекурсию. Массивы плотные, конечной глубины, без циклов; все числа и их сумма конечны. Сумма пустой структуры равна 0.

Сигнатура

function sum(arr)

Пример

sum([1, [2, -3], [4, [5, -6]], 7]); // 10

Позиция вставки (Search Insert Position)

Реализуйте search_insert(nums,target). nums - отсортированный по неубыванию список целых чисел. Верните индекс первого элемента, не меньшего target, либо длину списка, если такого элемента нет. Это позиция вставки перед равными элементами.

Пустой список дает 0; вход не меняется. Требуется O(log n) времени; до 100000 элементов.

Сигнатуры

def search_insert(nums: list[int], target: int) -> int:
    ...

Пример

search_insert([1, 3, 3, 5], 3)
# 1

2. Цепочка из 3 промисов

Постановка задачи:

Реализуйте цепочку из трёх промисов с задержкой в 3 секунды на каждом этапе. Для этого необходимо:

  • Написать функцию multiplyByThree, которая принимает число, через 3 секунды умножает его на 3 (обратите внимание, в коде умножение происходит на 2, что может быть ошибкой) и возвращает результат в виде промиса.
  • Сформировать цепочку промисов, где:
    • Первый промис обрабатывает начальное число.
    • Результат каждого промиса передаётся следующему.
    • После третьего промиса результат выводится в консоль.
  • Реализовать данное поведение двумя способами:
    • С использованием метода then.
    • С использованием синтаксиса async/await.

Эта задача демонстрирует работу с цепочками асинхронных операций и позволяет сравнить подходы с использованием then и async/await.

14. string.prototype.repeatify

Метод repeatify для строки

Реализуйте метод repeatify, который дублирует строку заданное количество раз.

2. Reverse String

Переворот строки (Reverse String)

Напишите функцию, которая принимает массив символов и переворачивает его на месте.

3. largestPossibleNumber

Постановка задачи:

Дано целое число n. Требуется переставить его цифры так, чтобы получить наибольшее возможное число.

4. reverseNumber

Постановка задачи:

Реализовать функцию, которая принимает целое число и возвращает его развернутый вариант, сохраняя знак (+ или -). Например, 123 превращается в 321, а -456 в -654.

4. Concatenation of Array

Реализуйте getConcatenation(nums): верните новый массив, в котором все элементы nums расположены два раза подряд в исходном порядке.

nums - массив конечных чисел JavaScript. Повторы, отрицательные числа, ноль и дроби допустимы. Результат должен иметь длину, равную удвоенной длине входа. Не чередуйте две копии по отдельным элементам.

Для пустого входа верните новый пустой массив. Функция возвращает массив без вывода в консоль.

Пример

getConcatenation([1, 2, 1]) // [1, 2, 1, 1, 2, 1]

5. Contains Duplicate

Реализуйте containsDuplicate(nums): верните true, если одно числовое значение встречается в массиве не менее двух раз, иначе false.

nums - массив конечных чисел JavaScript. Равенство определяется числовым значением, поэтому 0 и -0 считаются равными. Повторы могут находиться в любых позициях, не только рядом.

Пустой массив и массив из одного элемента не содержат дубликатов. Функция возвращает булево значение без вывода в консоль.

Пример

containsDuplicate([1, 2, 3, 4, 2]) // true

6. fizzBuzz

Постановка задачи:

Реализовать функцию, которая принимает массив чисел и возвращает новый массив, где:

  • Числа, кратные 3, заменяются на "Fizz".
  • Числа, кратные 5, заменяются на "Buzz".
  • Числа, кратные 15, заменяются на "FizzBuzz".
  • Остальные числа остаются без изменений.