Вызов
Вам нужно сгенерировать программу или функцию, которая принимает положительное целое число N, вычисляет первые N членов последовательности Фибоначчи в двоичном формате, объединяет их в одно двоичное число, преобразует это число обратно в десятичное и затем выводит десятичное число как целое число.
Например
1 -> [0] -> 0 to decimal outputs 0
3 -> [0, 1, 1] -> 011 to decimal outputs 3
4 -> [0, 1, 1, 10] -> 01110 to decimal outputs 14
Вам не нужно выводить ->
, только число (например, если пользователь вводит 4
, просто вывод 14
). Стрелки просто помогают объяснить, что должна делать программа.
Контрольные примеры
1 -> 0
2 -> 1
3 -> 3
4 -> 14
5 -> 59
6 -> 477
7 -> 7640
8 -> 122253
9 -> 3912117
10 -> 250375522
11 -> 16024033463
12 -> 2051076283353
13 -> 525075528538512
14 -> 134419335305859305
15 -> 68822699676599964537
16 -> 70474444468838363686498
17 -> 72165831136090484414974939
18 -> 147795622166713312081868676669
19 -> 605370868394857726287334099638808
20 -> 4959198153890674493745840944241119317
Программа должна быть в состоянии вывести до предела используемого языка. Таблицы поиска или обычные обходные пути не допускаются.
Это код-гольф , поэтому выигрывает ответ с наименьшим количеством байтов!
int32_t binary_concat_Fib(int n)
, что бы ограничить результирующее выходное значение до 2 ^ 31-1. то есть вы предполагаете, что все сцепленные биты помещаются в целое число. Или функция должна работать до точки, где наибольшее число Фибоначчи не помещается в целое число само по себе, поэтому объединение битов требует повышенной точности?Ответы:
Python , 64 байта
Попробуйте онлайн!
источник
Желе ,
76 байтПопробуйте онлайн!
Как?
источник
Ṛc’SƲƤ
которые могут быть полезны для подобных последовательностей.Python 3.6 , 61 байт
Попробуйте онлайн!
источник
брейкфук , 397 байт
Ну, это было весело!
Принимает ASCII-ввод (например,
11
), выводит результат в ASCII.Примечание: чтобы попробовать это онлайн, убедитесь, что вы установили размер ячейки 32 бита (в правой части веб-страницы). Если вы не введете ввод, ваш браузер может произойти сбой.
Интерпретатор не может обрабатывать ввод
11
и выше, потому что он поддерживает только до 32 бит.Попробуйте это на copy.sh
объяснение
Получите десятичный вход и добавьте один (чтобы смягчить одно за другим)
Генерация чисел Фибоначчи на ленте.
Настройка для входящего двоичного конкатенационного цикла
Таким образом, ячейки содержат значение, начиная с первой позиции,
Посмотрите на эти клетки:
Я обозначу это:
pow
есть ли найти максимальную степень 2, которая строго больше, чемnum
.sum
это объединение чисел до сих пор.cat
это степень 2, которую мне нужно было бы умножитьnum
, чтобы объединитьnum
передsum
(так что я мог бы просто добавить).Цикл: проверьте,
f_n
строго ли меньшеpow
.Truthy:
Обнулить мусор. Затем добавьте
num
*cat
кsum
. Далее, загрузите следующий ряд Фибоначчи (=f_(n-1)
, если он не существует, цикл выхода) и установитьcat
вcat
*pow
. Подготовьтесь к следующему циклу (обнулите больше мусора, сдвиньте область на один).Falsey:
Установите
pow
на 2 *pow
, восстановитьnum
.Повторяйте до тех пор, пока не останется число Фибоначчи.
Чистый мусор. Возьмите каждую цифру полученного числа и выведите каждое (в ascii).
источник
Шелуха , 7 байт
Попробуйте онлайн!
объяснение
источник
Japt , 9 байт
Запустить его
Объяснение:
источник
Pyth, 22 байта
Попробуй здесь
объяснение
источник
Perl 6 , 38 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) ,
7065585755 байтПопробуйте онлайн!
источник
-0
в конце, чтобы сохранить еще 2 байта.05AB1E , 6 байтов
Попробуйте онлайн!
1-индексироваться.
источник
J, 36 байт
Объяснение:
источник
x86,
372221 байтИзменения
bsr
. Спасибо, Питер Кордес!-2 путем обнуления регистров с
mul
.-1, используя цикл while вместо
loop
иpush
/pop
ecx
(кредит Питера Кордеса).Вход в
edi
, выход вedx
.Objdump:
источник
lea
для сдвига и добавления в fib2. Кроме того, извлечение каждого бита по одному не требуется. Используйте,bsr %eax, %ecx
чтобы найти количество бит в двоичном представлении, и используйте сдвиг на CL / или для слияния, как это делает ответ Денниса на Python.cl
в счетчиках сдвига, поэтому возьмите свой счетчик циклов в другом регистре (например%edi
) и используйте егоdec %edi / jnz
(3 байта в 32-битном коде, 4 байта в 64-битном). В 32-битном коде это спасает всего 1 байт от сброса push / pop ecx. Не попадайтесь в ловушку использования,loop
когда это усложняет, а не облегчает проблему. (Соглашение о вызовах уже настроено, затуманивается%ebx
, поэтому не вызывайте свою функциюmain
) Вы можете вернуться в EAX, все еще используя преимущества 1-байтаxchg
, нет необходимости быть нестандартным, если вам это не нужно.inc %ecx
счетчик сдвига на дополнительный сдвиг влево по мере добавления, используяlea (%eax, %edx, 2), %edx
. Нейтрально в байтах для 32-разрядных, сохраняет один для x86-64. Но сохраняет инструкцию.loop
в коде гольф, я чувствую себя грязным. Ну, не совсем, но разочарован тем, что я не смог найти столь же маленькую реализацию, которая избежала бы такой медленной инструкции; вне кода гольф,loop
это одна из моих любимых мозолей . Я хотел бы, чтобы это было быстро на современных процессорах, потому что это было бы очень хорошо для циклов с расширенной точностью без частичных задержек с флагами, но это не так, и их следует рассматривать только как скрытую инструкцию по оптимизации размера, которая замедляет ваш код.xor
/mul
trick для обнуления трех регистров (вам когда-нибудь нужно столько нулей?), Но использование этого как части создания a1
делает его более разумным.APL (Dyalog) ,
2622 байта4 байта сохранены благодаря @ H.PWiz
Попробуйте онлайн!
источник
Haskell ,
897675 байтБезголовая версия:
источник
f=0:scanl(+)1f
(взят отсюда ). Функции могут быть анонимными, поэтому вы можете отбросить ведущиеg=
, см. Наше Руководство по правилам ггольфинга в Haskell .$realToFrac y
с.read.show$y
одного байтаПари / ГП , 59 байт
Попробуйте онлайн!
источник
APL + WIN, 55 байт
Запрашивает ввод целого числа на экране.
Максимальная целочисленная точность APL + WIN равна 17, а целочисленный предел составляет порядка 10E300, поэтому максимальное входное число равно 55, и в результате получается: 1,2492739026634838E300
источник
Python 3 , 94 байта
Попробуйте онлайн!
источник
Желе , 6 байт
Попробуйте онлайн!
Ḷ
owered диапазон -> п - йÆḞ
ibonacci номер -> от дес доB
Инары ->F
latten -> отḄ
Инары в десятичнуюисточник
10
и вы получите16024033463
, это неверно (правильный ответ250375522
).10
возвращаются250375522
MATL , 21 байт
Попробуйте онлайн!
объяснение
источник
J , 25 байт
Попробуйте онлайн!
объяснение
источник
Python 3 , 86 байт
Попробуйте онлайн!
источник
Добавить ++ , 113 байт
Попробуйте онлайн!
источник
PHP, 124 байта
Попробуйте онлайн!
Поэтому я искал способ вывода чисел Фибоначчи с помощью ряда, пока не нашел это . Оказывается, вы можете вычислить ряд Фибоначчи с помощью округления, поэтому я попробовал выполнить задачу с помощью рекурсивной функции.
Я нашел подход «округления» действительно интересным, и профессор недавно показал мне это.
Код
объяснение
Также проверьте эту запись в стеке, лучший ответ относится к той же статье в Википедии.
источник
Stax , 9 байт
Запустите и отладьте его на staxlang.xyz!
Распаковано (10 байт) и объяснение:
источник
Юлия 0,65 байт
Попробуйте онлайн!
источник
Pyth, 27 байт
Тестирование
Перевод Python 3:37 байтТестирование
Перевод Python 3:источник
Рубин , 61 байт
Попробуйте онлайн!
источник
Йотлин , 59 байт
Тестовая программа
Он поддерживает до 10, изменяя
.i(2)
для.toLong(2)
будет поддерживать до 14 , если это необходимоисточник
Python 2, 88 байт
источник
R ,
244180179 байтПопробуйте онлайн!
Сохранение некоторых байтов путем объединения числовых векторов, а не строк. Кровавый особый случай для 0!
источник
sapply
преобразована в вектор из-за того, что она рекурсивная. Это не может быть все заключено в одну строку. Как видите, программа запрашивает ввод пользователя, а затем возвращает ответ. Один байт можно сохранить, создав ярлык дляifelse
. И ... мы можем удалить,""
изscan
, да.