Учитывая положительное число , найти количество алканов с атомами углерода, игнорируя стереоизомеры ; или, что эквивалентно, количество немеченых деревьев с узлами, так что каждый узел имеет степень .
Это последовательность OEIS A000602 .
Смотри также: Парафины - Розетта Код
пример
Для ответ , потому что гептан имеет девять изомеров :
- Гептан :
- 2-метилгексан :
- 3-метилгексан :
- 2,2-диметилпентан :
- 2,3-диметилпентан :
- 2,4-диметилпентан :
Обратите внимание, что 3-метилгексан и 2,3-диметилпентан являются хиральными , но здесь мы игнорируем стереоизомеры.
Контрольные примеры
intput output
=============
0 1
1 1
2 1
3 1
4 2
5 3
6 5
7 9
8 18
9 35
10 75
11 159
12 355
13 802
14 1858
15 4347
16 10359
17 24894
18 60523
19 148284
20 366319
code-golf
sequence
combinatorics
chemistry
alephalpha
источник
источник
Ответы:
CJam (
100 98 91 8983 байта)Принимает ввод из стандартного ввода, выводит в стандартный вывод. Обратите внимание, что это использует лицензию, чтобы не обрабатывать ввод,
0
чтобы сохранить два байта, вставляя определенияC
иD
. Онлайн демоNB это очень медленно и неэффективно для памяти. Обрезка массивов позволяет получить более быструю версию (на 3 байта больше). Демо онлайн .
рассечение
Я манипулировал этим в немного разложенном по гольфу разложении, а затем посмотрел промежуточные последовательности и обнаружил, что они также находятся в OEIS:
Более ранние версии повторно использовали блок
C
(сворачивать два полинома) из этого ответа . Я нашел намного более короткий, но я не могу обновить этот ответ, потому что это из цепочки вопросов.источник
Node.js 11,6,0 ,
229 223 221218 байтПолучено из реализации Java, предложенной в Rosetta Code .
Попробуйте онлайн!
источник
Алхимик (1547 байт)
Демо онлайн .
Примечание: это довольно медленно. Если вы тестируете с помощью интерпретатора, который поддерживает применение правила несколько раз одновременно (например, мой - хотя убедитесь, что у вас установлена последняя версия, исправляющая ошибку в синтаксическом анализаторе), вы можете значительно ускорить процесс, добавив два правила:
которые встраивают маршрут через существующие правила
Частичное вскрытие
На высоком уровне это использует тот же подход, что и мой ответ CJam.
Вычислительная модель Алхимика по сути является машиной регистра Минского . Тем не менее, Alchemist очень хорошо раскрывает эквивалентность кода и данных, и, позволяя эффективно использовать много токенов в левой части производственного правила, состояние не ограничивается представлением одним атомом: мы можем использовать кортеж атомов, и это позволяет (не рекурсивные) подпрограммы. Это очень полезно для гольфа. Единственное, чего на самом деле не хватает, так это макросов и возможность отладки.
Для массивов я использую функцию сопряжения, которая может быть реализована в ГМ. Пустой массив представлен0 и результат предварительного Икс массив A является ( 2 А + 1 ) 2Икс , Существует одна подпрограмма для сопряжения: вызывается подпрограмма,
P
и она добавляет значениеe
tob
. Есть две подпрограммы, которые нужно разомкнуть:n
отсоединениеb
отe
иb
; иt
unpairsd
кe
иd
. Это позволило мне сохранить немного перетасовываемых данных между переменными, что важно: одна операция «перемещение»расширяется как минимум до 17 байтов:
где
S
текущее состояние иT
следующее состояние. Неразрушающий «копия» еще дороже, потому что это должно быть сделано как «шаг» отa
кb
и вспомогательнойtmp
, с последующим «хода» отtmp
спины кa
.затемнение
Я связывал различные переменные друг с другом и исключил около 60 штатов в процессе игры в гольф, и многие из них в любом случае не имели особо значимых имен, но для полной игры в гольф я написал минимизатор, поэтому имена теперь совершенно не поддаются расшифровке. Удачи, обратный инжиниринг это! Вот минимизатор (в CJam), который делает несколько предположений о коде, но может быть адаптирован для минимизации других программ Alchemist:
источник
Пари / ГП , 118 байт
Прямой перевод ответа Питера Тейлора на CJam .
Попробуйте онлайн!
источник