Мемоизация длины пути Коллатца

Задача по программированию с проверкой онлайн

Сложность
Средняя
Языки
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

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки