Easy level

#Easy-level

Форматирование списка слов

#Форматирование-списка-слов

Напишите функцию, которая принимает на вход массив строк и возвращает строку, отформатированную согласно следующим правилам:
1. все слова разделяются запятой 2. последнее слово должно быть отделено союзом "и" 3. пустые строки должы быть проигнорированы
Пример:
"Python", "JavaScript", "Java" --> "Python, Javascript и Java"

Тест кейсы:
1. Список слов
Вход: "Python", "JavaScript", "Java"
Выход: "Python, JavaScript и Java"
2. Список слов с пустой строкой
Вход: "Python", "", "JavaScript", "Java"
Выход: "Python, JavaScript и Java"
3. Список из одного слова
Вход: "Python"
Выход: "Python"
3. Массив пустых строк
Вход: "", "", "", ""
Выход: ""

Medium level

#Medium-level

Повторы в заданном окне

#Повторы-в-заданном-окне

Дан массив целых чисел. Найдите сумму уникальных чисел, которые в m подряд идущих числах повторяются не менее n раз.
Пример: 1, 3, 5, 6, 5, 7, 5, 3, 3, m = 3, n = 2 --> 8 8 = 5 + 3, 5 повторяется в промежутках 5, 6, 5 и 5, 7, 5, 3 повторяется в промежутке 7, 3, 3
На входе: массив целых чисел длиной не менее m
На выходе: сумма чисел, удовлетворяющих условию (integer)

Тест кейсы:
1. Массив чисел с одним повтором по заданным по условиям
Вход: 1, 3, 5, 6, 5, 7, 3, m = 3, n = 2 Выход: 5
2. Массив чисел с двумя повторами по заданным по условиям
Вход: 1, 3, 5, 6, 5, 3, 3, m = 3, n = 2 Выход: 8
3. Массив чисел с тремя повторами по заданным по условиям с повторяющимися значениями
Вход: 1, 5, 3, 5, 6, 5, 3, 3, m = 3, n = 2
Выход: 8
4. Массив чисел без повторов по заданным условиям
Вход: 1, 3, 5, 6, 5, 7, 3, m = 2, n = 2
Выход: 0

Hard level

#Hard-level

LZ78

#LZ78

LZ78 - алгоритм сжатия без потерь, являющийся одним из наиболее известных предшественников современных алгоритмов, используемых в архиваторах.
Разберем работу алгоритма на примере строки "abcababdc" Создется словать для встретившихся ранее строк. В начале этот словарь пуст. Символы по порядку начинают считываться кодировщиком. Когда текущий символ "a" читается из входной строки, в словаре ищется строка из одного символа "a". Если такой строки нет, то "a" добавляется в словарь в виде "a: 1", а на выход подается метка (0, "a"). Аналогино происходит и со следующими двумя символами "b" и "c". После их обработки словарь имеет вид "a: 1, b: 2, c: 3". Далее, если вхождение символа "a" обнаружено в словаре, то читается следующий символ "b", и в словаре ищется вхождение двухсимвольной строки "ab". Если такое значение не найдено, то в словарь записывается строка "ab" в виде "ab": 4", а на выход подается значение (1, "b"). Это значение означает строку "ab", так как позицию 1 в словаре занимает символ "a". Процесс продолжается до последнего символа.
Все шаги для строки "abcababdc":

Считываемые символыКод на выходеСловарь после данной итерации
a0, aa: 1
b0, ba: 1, b: 2
c0, ca: 1, b: 2, c: 3
ab1, ba: 1, b: 2, c: 3, ab: 4
abd4, da: 1, b: 2, c: 3, ab: 4, d: 5
c3, ""a: 1, b: 2, c: 3, ab: 4, d: 5

На выходе получаем массив закодированных символов [[0, "a"], [0, "b"], [0, "c"], [1, "b"], [4, "d"], [3, ""]]

Задание: восстановить строку по закодированным данным (декодировать строку).
На входе: массив, состоящий из массивов закодированных символов
На выходе: иссходная строка

Тест кейсы:

1. Тест без повторов символов
Вход: (0, 'a'), (0, 'b'), (0, 'c')
Выход: abc 2. Тест с повторами символов
Вход: (0, 'a'), (0, 'b'), (0, 'c'), (1, 'b'), (4, 'a'), (2, 'c')
Выход: abcabababc
3. Тест с повторами символов и пустой строкой в последнем массиве
Вход: (0, 'a'), (0, 'b'), (0, 'c'), (1, 'b'), (4, 'c'), (1, '')
Выход: abcababca
4. Тест с пустым массивом
Вход: []
Выход: ""