Описание оплетки
В этой косе, когда нить пересекает верхнюю часть другой нити, она добавляет значение другой нити к себе, и все остальные нити проходят через нее. Оплетка имеет три нити, каждая из которых начинается с 1. Первый кроссовер - крайняя левая нить, пересекающая среднюю нить. Следующий кроссовер - это самый правый участок, пересекающий новый средний участок (ранее самый левый участок). Эти два шага кроссоверов повторяются. Другими словами, первый кроссовер есть, [a, b, c] -> [b, a+b, c]
а второй есть [a, b, c] -> [a, b+c, b]
. Используя эти правила, вот первые шесть уровней косы:
1,1,1
1,2,1
1,3,2
3,4,2
3,6,4
6,9,4
Твое задание
Напишите программу или функцию для игры в гольф, которая принимает целое число в качестве уровня оплетки и выводит три значения для этого уровня оплетки. Вы должны указать, являются ли ваши уровни нулевыми или единичными. Ввод и вывод могут быть в любом разумном формате, и допускается конечный пробел.
Тестовые случаи (на основе 1)
1 -> 1,1,1
2 -> 1,2,1
5 -> 3,6,4
10 -> 28,41,19
Ответы:
MATL ,
181716 байтовВход основан на 0.
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
При заданном векторе строки
[a b c]
следующий вектор получается после умножения матрицы наили
в зависимости от того, является ли индекс итерации нечетным или четным. Например, матричный продукт
[1 3 2]*[0 1 0; 1 1 0; 0 0 1]
дает[3 4 2]
. Потом[3,4,2]*[1 0 0; 0 1 1; 0 1 0]
дает[3 6 4]
и тд.Также обратите внимание, что вторая матрица равна первой повернутой на 180 градусов, что может быть использовано для экономии нескольких байтов.
источник
[[0, 1, 0], [1, 1, 1], [1, 1, 0]]
и разные стартовые позиции очень похожи на четные и нечетныеn
Haskell, 51 байт
При этом используется индексирование на основе 0. Пример использования:
(f(1,1,1)!!) 10
->(28,60,41)
.f
создает бесконечный список троек кос и(f(1,1,1)!!)
выбирает n-й.f
сама по себе простая рекурсия, которая составляет список своих аргументов, за которыми следуют левый кроссовер и рекурсивный вызов с левым и правым кроссовером.источник
Рубин,
6057 байтУровни 1 основаны.
На основе следующей формулы:
Спасибо Нейлу за 3 байта с некоторыми изящными побитовыми махинациями.
источник
[f[n-2|1],f[n],f[n-1&-2]]
.Python 2 , 57 байт
Попробуйте онлайн!
источник
Желе , 14 байт
Попробуйте онлайн!
Как это работает
источник
TI-Basic, 58 байт
Один основе.
источник
Prompt
, это 2-байтовая команда.Prompt
- это только один байт. Но спасибо за объяснение концепции токенов :)PowerShell 2+, 75 байт
1 основанный индекс
Попробуйте онлайн! или попробуйте все тестовые случаи!
Цикл всегда выполняется один раз, поэтому в случае уровня оплетки
1
я просто начинаю с массива,1,1,0
так что результат алгоритма с make1,1,1
.$a[1]
всегда середина, тогда я просто определяю, будет ли индекс другого элемента ($d
) равен0
или2
основан на том, является ли текущий уровень четным или нечетным. PowerShell поддерживает несколько назначений одновременно, поэтому замена становится такой же простой, как и$x,$y=$y,$x
в основном то, что я делаю с элементами массива, просто встраивая дополнение в это назначение.источник
Javascript (ES6), 55 байт
repl.it
1 на основе
Это просто порт Ruby-ответа @ Doorknob с потрясающим побитовым полем @ Neil.
источник
Befunge, 64 байта
Попробуйте онлайн!
объяснение
источник
05AB1E , 17 байт
Попробуйте онлайн!
источник
Ява 8, 121
Это использует основанные на одном уровне:
Ungolfed, с тестовой программой:
Выход:
источник
Язык GameMaker, 113 байт
Одноиндексный, основанный на рекурсивном решении Doorknob. Пожалуйста, не спрашивайте, почему вы не можете инициализировать массив примитивов одновременно в GameMaker, я действительно не знаю ...
Основная программа (69 байт):
Подпрограмма
a
(46 байт):источник
Perl 6 , 60 байт
Нулевой основе.
Прямо вперед генерирует ленивую бесконечную последовательность, а затем индексирует ее.
Есть, вероятно, лучшие подходы.
источник
Clojure, 98 байт
Отслеживает текущее значение
v
и с каких позиций суммирование должно быть сделано для следующего раунда. Начинает одно состояние перед[1 1 1]
индексированием на основе 1.источник
C #
8886 байтобъяснение
источник
Mathematica, 68 байт
Простое рекурсивное определение безымянной функции, принимая положительный целочисленный аргумент и возвращая упорядоченный список из трех целых чисел.
источник