Способы добраться до номера


10

С учетом ввода первого числа , а второе число (как положительные целые числа, нулевой exluded), определить , сколько способов вы могли бы сделать второй из первого, используя следующие действия: +1, +2и *3. Операции просто применяются слева направо.

Примеры:

  1. Вход: 1 2. Выход: 1. То есть, вы могли бы получить 2только делать +1, так что в одну сторону.

  2. Вход: 1 3. Выход: 3. То есть, вы можете получить 3, выполнив +2или +1+1, или*3

  3. Вход: 1 4. Выход: 4.

  4. Вход: 2 6. Выход: 6.

  5. Вход: 2 7. Выход: 9.

  6. Вход: 1 10. Выход: 84.

В случае, если нет способов, например 100 100, или 100 80, вывод есть 0.

Вы также можете принять ввод в виде массива или строки с любым удобным разделителем.

Самое короткое решение выигрывает.


Похоже, что это может быть обманом, извините, если это так - не нашел подобный вопрос.
Никель

4
А как насчет входов, для которых ответ должен быть бесконечным? Например, любой ввод, где первое целое число отрицательно, потому что вы можете умножить на три, а затем увеличить обратно до исходного числа и повторить столько раз, сколько вы хотите.
Питер Тейлор

1
@ Патрик: Это имеет смысл, хотя. Начиная с -1 и заканчивая 0, вы можете подать заявку *3 +2 +1столько раз, сколько захотите, а затем подать заявку, +1чтобы добраться до 0.
Деусови

@Peter Справедливое замечание, ограниченное положительными числами.
Никаэль

Ответы:


1

Pyth - 26 24 байта

Кажется, в Pyth есть ошибка, которая заставляет его принимать входные данные в неправильном порядке, но в любом случае это не должно иметь значения.

/m.vj;+sdzs^Lc3"+1+2*3"S

Тестовый пакет .

( 1 10тайм-аут в сети, но работал на моем компьютере).


Тайм-аут, с такими маленькими числами? Да.
Никель

@nicael да, есть только 59K способов, которые я проверяю 10, но pyth - это slooooooow
Maltysen

6

Javascript ES6, 45 44 байта

f=(a,b=B)=>a<(B=b)?f(a+1)+f(a+2)+f(a*3):a==b

Пример работы:

f(1,2)  -> 1
f(2,6)  -> 6
f(1 10) -> 84

1
Интересное использование параметров по умолчанию, хотя по общему признанию это не сохраняет никаких байтов здесь. =Bи (B=)( bопущено специально) составляет 6 символов, и альтернатива - ,b3 раза передать рекурсивные вызовы, которые также являются 6 символами. Во всяком случае, хорошая работа.
Патрик Робертс

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.