У моего учителя в Precalc есть одна из его любимых проблем, которую он придумал (или, скорее всего, украл по мотивам xkcd ), которая связана с рядом n
писсуаров. «Шах и мат» - это ситуация, в которой каждый писсуар уже занят ИЛИ рядом с ним находится занятый писсуар. Например, если человек является X
, то
X-X--X
считается матом. Обратите внимание, что человек не может занять писсуар рядом с уже занятым писсуаром.
задача
Ваша программа примет число через stdin
аргументы командной строки или аргумент функции. После этого ваша программа распечатает или вернет количество возможных путей образования матов с указанным количеством писсуаров.
Примеры
0 -> 1
(отсчеты нулевой случай как мат)
1 -> 1
( X
)
2 -> 2
( X-
или -X
)
3 -> 2
( X-X
или -X-
)
4 -> 3
( X-X-
, -X-X
или X--X
)
5 -> 4
( X-X-X
, X--X-
, -X-X-
, или -X--X
)
6 -> 5
( X-X-X-
, X--X-X
, X-X--X
, -X--X-
или -X-X-X
)
7 -> 7
( X-X-X-X
, X--X-X-
, -X-X--X
, -X--X-X
, X-X--X-
, X--X--X
или -X-X-X-
)
8 -> 9
( -X--X--X
, -X--X-X-
, -X-X--X-
, -X-X-X-X
, X--X--X-
, X--X-X-X
, X-X--X-X
, X-X-X--X
, X-X-X-X-
)
...
счет
Победит самая маленькая программа в байтах.
''
. Это так же, как с факториалами и перестановками, 0! = 1, потому что есть ровно 1 способ расставить 0 предметов.Ответы:
Оазис , 5 байт
Код
Расширенная версия
объяснение
Попробуйте онлайн!
источник
info.txt
info.txt
полезен, он содержит документацию для каждой команды OasisJava 7,
6542 байтаПоследовательность просто добавляет предыдущие элементы, чтобы получить новые. Наконечник шляпы к orlp и Пруту для этого более короткого метода;)
Старый:
После пятого элемента разрыв в последовательности возрастает на пять элементов предыдущего.
источник
f
функцию из другого фрагмента вместо рекурсии. Глупый я, исправляю ...u>0?u:1;
) не может стать1;
?u>0?u:1;)
на,1;
если вы измените первое сравнение наu>1
, то при u = 2 выходной будет g (0) + g (-1), что будет 2Python 2,
42403935 байтГенерация фактических наборов:
источник
Рубин,
5834 байтаСильно вдохновлен оригинальным ответом Geobits на Java.
Смотрите его на repl.it: https://repl.it/Dedh/1
Первая попытка
Смотрите его на repl.it: https://repl.it/Dedh
источник
Python, 33 байта
Используются сдвинутые базовые случаи
f(-1) = f(0) = f(1) = 1
. ЕслиTrue
бы можно было использовать для 1, нам не нужно 3 байта для+()
.источник
J,
312723 байтаСохранено 4 байта благодаря милям!
Объяснение скоро придет.
Старое решение
Это повестка дня. LHS - это герунда, состоящая из двух глаголов:
>.1&^
и-&3+&$:-&2
. Первый используется, если условие (2&<
) не выполняется. Это означает, что форк>.1&^
активируется над аргументом. Заметим:Здесь
>.
принимает максимум два значения. Таким образом, он дает 1, 1 и 2 в качестве начальных членов.Второй глагол в герунде - это вилка:
Левый и правый зубцы применяются к глаголу, вычитая 3 и 2 соответственно; тогда средний глагол вызывается с левыми и правыми аргументами, равными тем.
$:
вызывает глагол для каждого аргумента и+
добавляет эти два. Это в основном эквивалентно($: arg - 3) + ($: arg - 2)
Контрольные примеры
источник
MATL ,
2523 байтаПопробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Две свертки! Ура!
Это создает массив, скажем, A, где каждая возможная конфигурация является строкой.
1
в этом массиве представляет собой занятую позицию. Например, для ввода4
массив AЗатем код сворачивает массив A с
[1 1 1]
. Это дает массив B. Занятые позиции и соседи занятых позиций в A дают ненулевой результат в массиве B:Таким образом, первое условие для того, чтобы конфигурация была матом, состоит в том, что B не содержит нулей в этой строке. Это означает, что в этом ряду A не было пустых позиций, или были некоторые, но были соседи занятых позиций.
Нам нужно второе условие. Например, последняя строка удовлетворяет вышеуказанному условию, но не является частью решения, поскольку конфигурация была недействительной с самого начала. Действительная конфигурация не может иметь две соседние занятые позиции, то есть не может иметь два смежных
1
в A. Эквивалентно, она не может иметь двух смежных значений в B, превышающих1
. Таким образом, мы можем обнаружить это, сворачивая B с[1 1]
и проверяя, что в результирующем массиве C,никакое значение в этом ряду не превышает
3
. Конечным результатом является количество конфигураций, которые удовлетворяют двум условиям.источник
PHP
10511393 байта+3 за
n=1
; +9 за$argv
, -1-3 в гольфе-20: заметил, что мне не нужны комбинации, а только их количество
бежать с
-r
цикл от 2 ** н-1 до 0:
11
,000
,00
в начале или в конце, или один0
результат печати
тот же размер, немного проще регулярное выражение
11
,00
в начале или в конце, или000
PHP, 82 байта
Арнаулд портировал и играл в гольф:
ничего не печатает при n = 0
источник
n=0
: вставьте?:1
перед финалом;
Желе , 11 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
JavaScript (ES6) / рекурсивный,
3027 байтРедактировать: сохранено 3 байта благодаря Shaun H
JavaScript (ES6) / нерекурсивный
9077 байтРедактировать: сохранено 13 байтов благодаря Конору О'Брайену и Титу
источник
((i|r|l)&(k-1))
может стать((i|r|l)&k-1)
, или даже((i|r|l)&~-k)
i<<1
->i*2
илиi+i
!(i&(x=i>>1|i+i))&&((i|x)&(k-1))==k-1
; и если вы можете вставить,k--
куда - нибудь, вы можете заменитьk-1
с ,k
чтобы сохранить круглые скобки.&(k-1)
в любом случае не нуждается в паренсе; но вы можете использовать&~k
вместо этого.f=n=>n<3?n||1:f(n-2)+f(n-3)
Mathematica, 35 байт
Определяет функцию
a
. Принимает целое число в качестве входных данных и возвращает целое число в качестве выходных данных. Простое рекурсивное решение.источник
AnyDice , 51 байт
Здесь должно быть больше ответов AnyDice.
Мое решение определяет рекурсивную функцию, которая вычисляет
a(n)=a(n-2)+a(n-3)
. Он возвращаетa(0)=a(1)=1
иa(2)=2
использует некоторую магию целочисленного деления.Попробуйте онлайн
Примечание: вывод может выглядеть странно, и это потому, что он обычно используется для вывода вероятностей игры в кости. Просто посмотрите на число слева от гистограммы.
источник
Perl,
3534 байтаВключает +1 для
-p
Внести вклад в STDIN
checkmate.pl
:Недавно разработанная секретная формула. Ripple обновляет 3 переменные состояния без необходимости параллельных присваиваний.
Это одинаково мало (но намного медленнее и занимает намного больше памяти), чтобы просто решить исходную проблему:
но это не работает для
0
источник
JavaScript (ES6), 62 байта
Это первый раз, когда мне понадобились два фиктивных имен переменных. Рекурсивная версия, вероятно, будет короче, но мне действительно нравится
reduce
... Редактировать: Нашел решение, также 62 байта, которое имеет только одну фиктивную переменную:источник
Желе , 19 байт
Рекурсивное решение ,
вероятно,короче ...Смотрите это на TryItOnline
или смотрите серию для
n = [0, 99]
, также на TryItOnlineКак?
Возвращает
n+3
номер Падована путем подсчета комбинацийисточник
> <> , 25 + 2 = 27 байт
Требуется, чтобы входные данные присутствовали в стеке при запуске программы, поэтому +2 байта для
-v
флага. Попробуйте онлайн!Первая строка инициализирует стек
1 1 2 n
, гдеn
находится входной номер. Вторая строка, идущая в обратном порядке, проверяет, чтоn
больше 1. Если это так,n
уменьшается, и следующий элемент в последовательности генерируется следующим образом:В последней строке выводится число в нижней части стека, которое является обязательным элементом в последовательности.
источник
CJam , 20 байтов
Попробуйте онлайн!
объяснение
При этом используются отношения повторения, показанные на странице OEIS .
источник
05AB1E , 12 байтов
объяснение
Попробуйте онлайн!
источник
FRACTRAN,
10493 байтаВход есть,
11**n*29
а выход есть29**checkmate(n)
.Это в основном для развлечения, тем более что в настоящее время меня обгоняют Python, JS и Java. Тем не менее, такое же количество байтов, как в PHP: D Предложения по игре в гольф приветствуются.
Ungolfing
источник
На самом деле, 25 байтов
Это кажется немного длинным для простого
f(n) = f(n-2) + f(n-3)
отношения повторения. Предложения по игре в гольф приветствуются. Попробуйте онлайн!Ungolfing
источник
На самом деле , 18 байт
Это на самом деле более длинный ответ Дениса на желе. Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing
источник
Stax , 7 байт
Запустите и отладьте его
Использует рекуррентное соотношение.
C(n) = C(n-2) + C(n-3)
источник
C (gcc) , 33 байта
Попробуйте онлайн!
источник
Haskell , 27 байт
Попробуйте онлайн!
источник