Skip to content

Instantly share code, notes, and snippets.

@evgeniyworkbel
evgeniyworkbel / Испытание 6: Генератор случайных чисел
Created July 14, 2022 18:50
Курс: "Введение в ООП" (Хекслет)
Random.js
Реализуйте генератор случайных чисел, представленный классом Random. Интерфейс объекта включает в себя три функции:
Конструктор. Принимает на вход seed, начальное число генератора псевдослучайных чисел.
getNext() — метод, возвращающий новое случайное число.
reset() — метод, сбрасывающий генератор на начальное значение.
Экспортируйте класс по умолчанию.
Примеры
const seq = new Random(100);
@evgeniyworkbel
evgeniyworkbel / Испытание 5: Круг
Created July 14, 2022 18:49
Курс: "Введение в ООП" (Хекслет)
Circle.js
Реализуйте и экспортируйте по умолчанию класс Circle описывающий круг. У круга есть только одно свойство - его радиус. Реализуйте методы getArea() и getCircumference(), которые вычисляют и возвращают площадь и длину окружности соответственно.
Примеры
const circle = new Circle(3);
circle.getArea(); // 28.274...
Подсказки
Площадь круга: πr2
Длина окружности: 2*πR
Особенность структуры двоичного дерева даёт хороший прирост к эффективности при поиске нужного значения. Для этого нужно, чтобы двоичное дерево было сбалансированным. То есть необходимо построить дерево так, чтобы общее количество узлов в левом и правом поддеревьях было примерно одинаковым для любого узла дерева.
Node.js
Реализуйте метод isBalanced(), который проверяет дерево на сбалансированность. Он возвращает true, если количество узлов в левом и правом поддеревьях каждого узла отличается не более, чем на 2. В ином случае метод должен вернуть false.
Сбалансированное дерево
Сбалансированное двоичное дерево поиска
Несбалансированное дерево
@evgeniyworkbel
evgeniyworkbel / Испытание 3: Агрегация в двоичном дереве
Created July 14, 2022 18:46
Курс: "Введение в ООП" (Хекслет)
В данном испытании мы будем использовать двоичное дерево, и выполнять агрегацию данных.
Node.js
Реализуйте следующие методы в классе:
getCount() — возвращает количество узлов в дереве.
getSum() — возвращает сумму всех ключей дерева.
toArray() — возвращает одномерный массив содержащий все ключи.
toString() — возвращает строковое представление дерева.
every(fn) — проверяет, удовлетворяют ли все ключи дерева условию, заданному в передаваемой функции.
@evgeniyworkbel
evgeniyworkbel / Испытание 2: Построение двоичного дерева
Last active July 14, 2022 18:47
Курс: "Введение в ООП" (Хекслет)
Двоичное дерево — иерархическая структура данных, в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым наследниками.
В данном испытании мы будем использовать подвид двоичного дерева — двоичное дерево поиска. Правильное дерево не содержит повторяющихся ключей, и для каждого узла гарантируется, что в левом поддереве все значения меньше текущего, а в правом — больше.
Двоичное дерево поиска
Node.js
Реализуйте и экспортируйте по умолчанию класс, который реализует представление узла.
Класс должен содержать:
@evgeniyworkbel
evgeniyworkbel / Испытание 1: Поиск в двоичном дереве
Created July 14, 2022 18:42
Курс: "Введение в ООП" (Хекслет)
Node.js
Двоичное дерево поиска состоит из узлов, каждый из которых содержит значение ключа и два поддерева (левое и правое), которые в свою очередь также являются двоичными деревьями. Правильное дерево не содержит повторяющихся ключей, и для каждого узла гарантируется, что в левом поддереве все значения меньше текущего, а в правом — больше.
Двоичное дерево поиска
Реализуйте и экспортируйте по умолчанию класс, который реализует представление узла. Конструктор класса принимает на вход значение ключа (число), и двух детей, которые в свою очередь также являются узлами. Дерево может быть создано пустым.
Класс должен содержать методы:
Геттер getKey() — возвращает ключ. Если дерево пустое, возвращает null.
@evgeniyworkbel
evgeniyworkbel / Испытание № 1. Обработка ссылок
Created June 22, 2022 11:59
Курс "Абстракции с помощью данных" Hexlet.io
url.js
Реализуйте абстракцию для работы с урлами. Она должна извлекать и менять части адреса. Интерфейс:
make(url) - Конструктор. Создает урл.
setProtocol(data, protocol) - Сеттер. Меняет схему.
getProtocol(data) - Селектор (геттер). Извлекает схему.
setHost(data, host) - Сеттер. Меняет хост.
getHost(data) - Геттер. Извлекает хост.
setPath(data, path) - Сеттер. Меняет строку запроса.
getPath(data) - Геттер. Извлекает строку запроса.
Иногда в программировании возникает задача поиска разницы между двумя наборами данных, такими как объекты. Например, при поиске различий в json файлах. Для этого даже существуют специальные сервисы, например, http://www.jsondiff.com/ (попробуйте нажать на ссылку sample data и затем кнопку Compare).
solution.js
Реализуйте и экспортируйте по умолчанию функцию, которая сравнивает два объекта и возвращает результат сравнения в виде объекта. Ключами результирующего объекта будут все ключи из двух входящих объектов, а значением строка с описанием отличий: added, deleted, changed или unchanged.
Возможные значения:
added — ключ отсутствовал в первом объекте, но был добавлен во второй
deleted — ключ был в первом объекте, но отсутствует во втором
changed — ключ присутствовал и в первом и во втором объектах, но значения отличаются
@evgeniyworkbel
evgeniyworkbel / Испытание № 6: Скрэббл
Created June 16, 2022 12:05
Курс "JS: Объекты" Hexlet.io
scrabble.js
Реализуйте и экспортируйте по умолчанию функцию-предикат, которая принимает на вход два параметра: набор символов в нижнем регистре (строку) и слово, и проверяет, можно ли из переданного набора составить это слово. В результате вызова функция возвращает true или false.
При проверке учитывается количество символов, нужных для составления слова, и не учитывается их регистр.
Примеры
scrabble('rkqodlw', 'world'); // true
scrabble('avj', 'java'); // false
scrabble('avjafff', 'java'); // true
scrabble('', 'hexlet'); // false
Для записи цифр римляне использовали буквы латинского алфафита: I, V, X, L, C, D, M. Например:
1 обозначалась с помощью буквы I
10 с помощью Х
7 с помощью VII
Число 2020 в римской записи — это MMXX (2000 = MM, 20 = XX).
solution.js
Реализуйте и экспортируйте функцию toRoman(), которая переводит арабские числа в римские. Функция принимает на вход целое число в диапазоне от 1 до 3000, а возвращает строку с римским представлением этого числа.