Мемоизация длины пути Коллатца
Задача по программированию с проверкой онлайн
- Сложность
- Средняя
- Языки
- Python
- JavaScript
- TypeScript
- Java
- Go
- Темы
- Функции и замыкания
- Словари и множества
- Рекурсия и перебор
Функция steps(n) даёт число шагов, за которое n приходит к 1: steps(1) = 0, иначе steps(n) = 1 + steps(next), где next = n / 2 для чётного n и 3n + 1 для нечётного.
Функция мемоизирована одним общим кэшем «число → результат», пустым в начале и общим для всех запросов. Каждый вызов steps — и верхний, и рекурсивный — сначала смотрит в кэш: если значение там есть, это попадание (hit); иначе промах (miss): функция считает результат (с рекурсией) и кладёт его в кэш, в том числе для n = 1.
Дан список запросов queries (числа от 1 до 1000). Обработайте их по порядку и для каждого верните список [steps(q), промахи, попадания], где промахи и попадания посчитаны только для этого запроса.
Пример: [2, 4, 4] → [[1, 2, 0], [2, 1, 1], [2, 0, 1]]. Для 2 промахи у 2 и 1; для первой 4 промах у 4 и попадание у 2; вторая 4 — одно попадание.
Источник: задача CodeShare