#1 - Фундаментальные структуры данных
Реализация фундаментальных структур данных: двусвязный двунаправленный список, однонаправленная и двунаправленная очереди (на базе реализованного списка), стек (на базе массива), структура.
#2 - Важнейшие структуры данных: вектор, хеш-таблицы, деревья поиска
Реализация таких структур данных, как динамический массив (массив на основе связных списков и вектор), хэш-таблица с разрешением коллизий методом цепочек, двоичное дерево поиска, B-дерево, а также реализация алгоритма двоичного поиска.
#3 - Строки. Кодовые таблицы и кодировки. Графемы. Нормальные формы
Реализация алгоритма проверки строки на предмет того, является ли её содержимое числом (различные представления), алгоритма итерации строк, включающих в себя суррогатные пары UTF-16 и комбинирующие диакритические знаки без использования нативных механизмов итерирования.
#4 - Поиск в строке. Регулярные выражения
Реализация регулярных выражений для проверки наличия в строке символов, отличных от заданного набора; для разбиения строки на массив подстрок. Реализация функции замены шаблонных выражений в строке на переданные данные. Реализация регулярного выражения для удаления дублирующихся подстрок в строке. Реализация функции парсинга арифметических выражений и замены их на результат их вычисления.
#5 - Итераторы и паттерны их применения
Реализация функций для работы с перебираемыми объектами: take, filter, enumerate, seq, zip, mapSeq. Реализация итератора для генерации случайных чисел по заданным параметрам. Реализация класса Range для генерации диапазонов чисел и строковых символов по заданным параметрам.
#6 - Автоматы и генераторы
Реализация функции forEach для неблокирующего обхода iterable объектов любого размера с возможностью задания уровня приоритета обхода для каждого из объектов. Реализация потокового парсера чисел на базе генератора.
#7 - Обработка ошибок. Простые и контейнерные типы данных. Функторы и монады
Реализация контейнерного типа Result с состояниями Ok (данные в контейнере есть) и Error (контейнер содержит ошибку вместо данных). Реализация механизма распаковки значений из контейнера Result, аналогичного async/await. Доработка функции распаковки для работы с контейнерами разных типов (на примере Promise).
#8 - Асинхронное программирование. Функции обратного вызова. Монадические контейнеры для асинхронного программирования
Реализация функций sleep, timeout. Упрощенная реализация функций setImmediate/clearImmediate. Реализация функции promisify. Реализация класса SyncPromise, предоставляющего объект, совместимый по API с нативным Promise, но обладающий возможностью работать синхронно. Реализация функции allLimit для ограничения числа одновременно выполняющихся объектов Promise.
#9 - Асинхронные итераторы. Реактивные структуры данных
Реализация функций on и once для подписки на события переданного HTML-элемента, предоставляющих интерфейс AsyncIterable. Реализация функций take, map, filter, seq для работы с асинхронно перебираемыми объектами.