О представительствах Цекендорфа / Базисные числа Фибоначчи
Это система счисления, которая использует числа Фибоначчи в качестве своей базы. Числа состоят из 0 и 1, и каждый 1 означает, что число содержит соответствующее число Фибоначчи, а 0 означает, что это не так.
Например, давайте преобразуем все натуральные числа <= 10 в основную Фибоначчи.
1 станет 1, потому что это сумма 1, которая является числом Фибоначчи,
2 станет 10, потому что это сумма 2, которая является числом Фибоначчи, и ей не нужно 1, потому что мы уже достигли желаемой суммы.
3 станет 100, потому что это сумма 3, которая является числом Фибоначчи, и ей не нужно 2 или 1, потому что мы уже достигли желаемой суммы.
- 4 станет 101, потому что это сумма [3,1], оба из которых являются числами Фибоначчи.
- 5 станет 1000, потому что это сумма 5, которая является числом Фибоначчи, и нам не нужны никакие другие числа.
- 6 станет 1001, потому что это сумма чисел Фибоначчи 5 и 1.
- 7 станет 1010, потому что это сумма чисел Фибоначчи 5 и 2.
- 8 станет 10000, потому что это число Фибоначчи.
- 9 станет 10001, потому что это сумма чисел Фибоначчи 8 и 1.
- 10 станет 10010, потому что это сумма чисел Фибоначчи 8 и 2.
Давайте преобразуем случайное число Базового числа Фибоначчи, 10101001010, в десятичное: сначала запишем соответствующие числа Фибоначчи. Затем мы вычисляем сумму чисел до 1.
1 0 1 0 1 0 0 1 0 1 0
144 89 55 34 21 13 8 5 3 2 1 -> 144+55+21+5+2 = 227.
Узнайте больше о базовых числах Фибоначчи: ссылка , он также имеет инструмент, который преобразует обычные целые числа в базовые числа Фибоначчи. Вы можете поэкспериментировать с этим.
Теперь вопрос:
Ваша задача - взять число в представлении Zeckendorf и вывести его десятичное значение.
Ввод - это строка, которая содержит только 0 и 1 (хотя вы можете принимать входные данные любым удобным для вас способом).
Выведите одно число в десятичном виде.
Тестовые случаи: (в формате input-> output)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах.
Примечание. Входные данные не будут содержать начальных 0 или последовательных 1.
Ответы:
Такси ,
1987 г.1927 байт-60 байтов из-за осознания того, что разрывы строк являются необязательными.
Попробуйте онлайн!
Поскольку я не возвращаюсь в Такси Гараж в конце, мой босс увольняет меня, поэтому он выходит с ошибкой.
источник
Joyless Park
кажется хорошим местом для посещенияSunny Skies Park
.Perl 6 ,
2823 байтаПопробуйте онлайн!
Анонимный кодовый блок, который принимает список
1
s и0
s в порядке LSB и возвращает число.Объяснение:
источник
Желе , 5 байт
Монадическая ссылка, принимающая список в форме с прямым порядком байтов (т.е. от LSB слева до MSB справа).
Попробуйте онлайн!
источник
J‘ÆḞḋṚ
.Wolfram Language (Mathematica) ,
35322928 байтПопробуйте онлайн!
источник
Haskell , 38 байт
Попробуйте онлайн!
Вводит в виде списка 1 и 0.
объяснение
Составляет список чисел Фибоначчи без первого, в переменной
f
.Принимает входной список,
reverse
умножает каждую запись на соответствующую записьf
, затемsum
выводит результаты.Haskell , 30 байт
Попробуйте онлайн!
Если сначала мы введем вход с младшим битом, то он нам не нужен,
reverse
поэтому мы можем сохранить 8 байтов.источник
Python 2 , 43 байта
Попробуйте онлайн!
Принимает ввод в виде списка. Обновление является более короткой версией
a,b=b+x,a+b+x
, которая похожа на обновление Фибоначчи,a,b=b,a+b
если вы игнорируетеx
.Python 2 , 45 байт
Попробуйте онлайн!
Принимает ввод в виде десятичных чисел.
источник
Pyth, 13 байт
Большая часть этого (8 байт) просто генерирует числа Фибоначчи.
Попробуйте это с этим набором тестов!
Объяснение:
источник
Brain-Flak ,
110,102,96,94,78, 74 байтаПопробуйте онлайн!
источник
J ,
2414 байтПопробуйте онлайн!
Гольф до 24-байтовой версии, которая использует смешанную базу для Фибоначчи.
Как это устроено
J , 21 байт
Попробуйте онлайн!
Уточненная версия 25-байтового решения Галена Иванова .
Используется диагональная сумма треугольника Паскаля, которая эквивалентна сумме биномиальных коэффициентов:
Как это устроено
J , 24 байта
Попробуйте онлайн!
Монадический явный глагол. Создает смешанную базу, которая представляет базу Фибоначчи, а затем вводит конверсию базы
#.
.Как это устроено
альтернативы
J , 27 байт
Попробуйте онлайн!
Идея:
J , 30 байт
Попробуйте онлайн!
На это ушло больше всего усилий. Использует выражение закрытой формы с трюком с округлением. В выражении 0-е и 1-е значения равны 0 и 1 соответственно, поэтому фактическая разрядность должна начинаться с 2.
Хотя ошибка (
((1-sqrt(5))/2)^n
условия) может накапливаться, она никогда не превышает 0,5, поэтому трюк с округлением работает до бесконечности. Математически:источник
MathGolf ,
86 байтПопробуйте онлайн!
объяснение
Благодаря JoKing сохранен 1 байт, а при заказе LSB - еще один байт.
источник
05AB1E ,
1198 байтПопробуйте онлайн!
Объяснение:
источник
Θ
.1
правда в 05AB1E уже. :) Также2+
можноÌ
.Python 3 , 63 байта
Попробуйте онлайн!
Принимает ввод через STDIN в виде строки.
источник
Красный ,
142, 126106 байтПопробуйте онлайн!
источник
Рубин , 39 байт
Попробуйте онлайн!
источник
Stax , 6 байт
Запустите и отладьте его
Довольно прямо вперед. LSB Заказ.
источник
Brain-Flak , 40 байт
Попробуйте онлайн!
источник
C (gcc) , 63 байта
Принимает входные данные в виде массива
1
's' и0
's' вместе с длиной массива. Это решение представляет собой довольно прямую обратную петлю.Попробуйте онлайн!
источник
Пролог (SWI) , 74 байта
Попробуйте онлайн!
Принимает ввод как список целых чисел 1 и 0 с самым старшим битом первым.
источник
Сетчатка 0.8.2 , 23 байта
Попробуйте онлайн! Ссылка включает в себя более быстрые тестовые случаи. Объяснение:
Вставьте разделители везде и удалите все нули. Например,
1001
становится;1;;;1;
.Повторно заменяйте каждое
1
на a1
в каждом из следующих двух мест, так как сумма их значений равна значению оригинала1
.1
Поэтому они мигрируют и накапливаются, пока не достигнут последних двух мест, которые (благодаря недавно добавленному разделителю) теперь оба имеют значение1
.Посчитай
1
с.источник
Japt
-x
, 9 байтПопытайся
источник
JavaScript (Node.js) , 41 байт
Порт ответа Xnor . Принимает входные данные как литерал BigInt.
Попробуйте онлайн!
JavaScript (ES6), 44 байта
Принимает ввод в виде массива символов в порядке LSB.
Попробуйте онлайн!
источник
На самом деле 8 байтов
Попробуйте онлайн!
Ввод принимается как список битов в порядке младшего бита.
Объяснение:
источник
Powershell, 68 байт
Тестовый скрипт:
Выход:
источник
Java (OpenJDK 8) , 65 байт
Довольно мал для ответа на Java, я доволен этим. Принимает ввод в виде LSB-первого упорядоченного массива целых.
Попробуйте онлайн!
Ungolfed
источник
Z80Golf , 34 байта
Пример с вводом 1001 - Попробуйте онлайн!
Пример с вводом 100101000-Попробуйте онлайн!
Монтаж:
источник