Прямой цепной алк * ne определяется как последовательность атомов углерода, соединенных одинарной (алкан), двойной (алкен) или тройной связью (алкин) (используются неявные атомы водорода). Атомы углерода могут образовывать только 4 связи, поэтому ни один атом углерода не может иметь больше четырех связей. Алкине с прямой цепью можно представить в виде списка углерод-углеродных связей.
Вот некоторые примеры действительных прямолинейных алкенов:
[] CH4 Methane
[1] CH3-CH3 Ethane
[2] CH2=CH2 Ethene
[3] CH≡CH Ethyne
[1,1] CH3-CH2-CH3 Propane
[1,2] CH3-CH=CH2 Propene
[1,3] CH3-C≡CH Propyne
[2,1] CH2=CH-CH3 Propene
[2,2] CH2=C=CH2 Allene (Propadiene)
[3,1] CH≡C-CH3 Propyne
[1,1,1] CH3-CH2-CH2-CH3 Butane
...
Хотя это не так, по крайней мере, один атом углерода будет иметь более 4 связей:
[2,3]
[3,2]
[3,3]
...
Ваша задача состоит в том, чтобы создать программу / функцию, которая при заданном натуральном числе n
выдает / возвращает количество действительных прямолинейных алкенов n
с длиной атомов углерода. Это OEIS A077998 .
Спецификации / Разъяснения
- Вы должны
1
правильно обращаться , возвращаясь1
. - Алки * нравятся
[1,2]
и[2,1]
считаются различными. - Выход - длина списка всех возможных вариантов * данной длины.
- Вы не должны обрабатывать 0 правильно.
Тестовые случаи:
1 => 1
2 => 3
3 => 6
4 => 14
Это кодовый гольф, поэтому выигрывает меньшее количество байтов !
источник
<=4
, верно?Ответы:
Оазис ,
97 байтПопробуйте онлайн!
объяснение
Это использует отношения повторения в OEIS :
источник
xkcd
это.xkcd-+311
работает , потому чтоk
в настоящее время не работает ...MATL , 10 байт
Попробуйте онлайн!
объяснение
Это использует характеристику, найденную в OEIS
источник
Оазис ,
98 байтСохранил байт благодаря Аднану
Попробуйте онлайн!
объяснение
источник
x
это сокращение от2*
:).0
здесь)Желе, 10 байт
Попробуйте онлайн!
Использует алгоритм Луиса Мендо .
объяснение
Желе, 15 байт
Попробуйте онлайн!
Использует грубую силу.
объяснение
источник
MATL , 14 байтов
Попробуйте онлайн!
объяснение
Это генерирует декартову степень
[1 2 3]
«возведенного» в число атомов минус 1, а затем использует свертку, чтобы проверить, что никакие два смежных числа в каждой декартовой кортежной сумме больше, чем4
.источник
Mathematica, 48 байтов
Как отметил Луис Мендо , это A006356 в OEIS. Вот мои оригинальные попытки:
Для ввода
n
,Tuples[{1,2,3},n-1]
список всех(n-1)
-кортежей элементов в{1,2,3}
представляющих все возможные последовательности одно-, двух-, или тройных связей дляn
атомов углерода.+##<5&
является чистой функцией, которая возвращает значение меньше, чем сумма ее аргументов5
, поэтомуSplit[#,+##<5&]&
разбивает список на подсписки, состоящие из последовательных элементов, попарные суммы которых меньше5
. Описание действительного alk * ne эквивалентно тому, что этот список имеет длину0
(в случае, гдеn=1
) или1
, поэтому я простоCount
количество(n-1)
-туплей, где длина этого списка совпадает0|1
.If[+##>4,4,#2]&
возвращает,4
если сумма его аргументов больше чем,4
и возвращает второй аргумент в противном случае.Fold[If[+##>4,4,#2]&]
делает слеваFold
от его ввода с этой функцией. Так что здесь яCount
количество(n-1)
-туплей, которым применение этого оператора не дает4
. Случай, гдеn=1
рассматривается, так какFold
остается неоцененным, когда его вторым аргументом является пустой список{}
.источник
LinearRecurrence[{2,1,-1},{1,3,6},#][[#]]&
?this site
, вы имеете в виду OEIS или PPCG?Python, 51 байт
Это прямая реализация рекуррентного отношения. Спасибо Тиму Педерику за 3 байта. Выходные данные - это число с плавающей точкой в Python 3 и целое число в Python 2.
Попробуйте онлайн!
источник
(n*n+n)/2
короче чем[1,3,6][n-1]
. И если вы используете Python 3 и вам не нравится заканчивать выводом с плавающей запятой,(n*n+n)//2
все равно будет короче.Pyth - 16 байт
Использует грубую силу.
Тестовый пакет .
источник
Рубин, 62 байта
Ужасно неэффективный базовый подход 10 грубой силы. Может быть улучшено до базы 5 для дополнительных байтов.
Числа генерируются, когда каждая цифра представляет связь (n-1 цифр)
0
представляет порядок связи 1,2
представляет порядок связи 3. Цифры свыше 2 недействительны.Мы умножаем это на 11, чтобы сложить соседнюю пару цифр. Снова цифры свыше 3 недействительны.
Мы объединяем два числа в строку и выполняем регулярное выражение для поиска недопустимых цифр. Если ничего не найдено, мы увеличиваем счетчик.
в тестовой программе
источник
Рубин, 51 байт
На основе рекуррентного соотношения согласно OEIS A006356.
Начинается с массива для элементов 0,1 и 2 последовательности, которые равны 1 (как я рассчитал, чтобы заставить его работать), 1 и 3 соответственно.
Итеративно добавляет
n
больше элементов в последовательность, а затем возвращает элементn
. Он всегда вычисляет на 2 элемента больше, чем нужно, но все равно это линейное время, которое намного эффективнее, чем мой предыдущий ответ.в тестовой программе
источник
Mathematica,
4240 байтЧисло байтов предполагает совместимую однобайтовую кодировку, например, CP-1252 (по умолчанию в установках Windows).
Это просто реализует повторение, данное в OEIS как унарный оператор.
источник
CJam (19 байт)
Набор онлайн-тестов . Это анонимный блок (функция), который берет один элемент в стеке и оставляет один в стеке. Обратите внимание, что тестовый набор включает в себя
a(0) = 1
.Используемое повторение основано на наблюдении для соответствующей последовательности OEIS A006356 :
но с соответствующим смещением, что устраняет необходимость в финале,
+ 1
как теперь покрытоa(0)
.рассечение
источник
Brain-Flak, 56 байт
Использует алгоритм, подробно описанный в первом комментарии на странице OEIS.
Попробуйте онлайн!
объяснение
Последовательность может быть определена так:
Программа начинается с
1
и многократно применяет это повторение для расчетаu(k)
Аннотированный код (актуальная аннотация впереди)
Визуализация стеков
Это происходит в одной итерации основного цикла (обратите внимание, что нули могут присутствовать или не присутствовать, но это не имеет значения в любом случае):
Состояние стеков теперь так же , как это было в начале цикла , за исключением , что текущий стек теперь имеет следующие значения
u
,v
иw
на нем.источник
Perl 6, 48
первоначально
но я забыл, что мне нужно,
sub f
поэтому выигрывает итеративное решение.источник
Дьялог АПЛ, 30 байт
Использует грубую силу. Пояснение (моя лучшая попытка хотя бы одного):
источник
Дьялог АПЛ, 29 байт
Работает с использованием рекурсивного определения целочисленной последовательности OEIS A006356.
источник
Питон с Numpy, 62 байта
Я должен был попробовать это, но кажется, что чистый Python и рекурсия короче, чем numpy и явный, основанный на матрице расчет на странице OEIS.
источник
R
6158555150 байтПринимает входные данные из стандартного ввода, использует матрицу возведения в степень для определения точного результата.
Если вы предпочитаете рекурсивное решение, вот прямая реализация рекуррентного отношения, указанного в OEIS, для 55 байтов .
источник
Excel, 123 байта
Реализует формулу из OEIS:
Как всегда, введите в
A1
формулу в любой другой ячейке.Выкопайте старые идентификационные данные Трига, чтобы увидеть, может ли это быть полезным. Теперь у меня болит голова.
источник
Lithp , 79 байт
Реализует рекурсивную целочисленную последовательность, указанную в OEIS.
Читаемая реализация и набор тестов.
источник