Куайн это программа , которая выводит его источник при запуске.
В этом задании Вы должны составить Фибоначчи-квин, вариант квин.
Что такое Фибоначчи-Куайн?
Fibonacci-quine - это программа, которая выводит модификацию источника по следующему правилу:
Первоначальный источник должен быть ...2...
. Другими словами, источник должен содержать 2
. (Почему 2? Если бы это был 1, никто бы не узнал, был ли это первый или второй, даже сама программа)
При запуске Вы должны вывести источник, но только конкретное число (На этом этапе 2
) изменилось на следующее число последовательности Фибоначчи. Например, ...3...
. То же самое касается вывода, вывода вывода и т. Д. Вы можете поддерживать целые числа до 2 ^ 32-1. Для целых чисел, превышающих этот предел, следующий вывод будет на ваше усмотрение.
Примечание ОП
Мне бы очень хотелось увидеть креативное решение для этого. Я не мог придумать единственного решения для этого, так как оба важных аспекта проблемы, фибоначчи и квина, не легки. Я буду ждать тогда!
Ответы:
Mathematica, 61 байт
Обратите внимание, что есть пробел. Это функция quine, т. Е. Вышеприведенный код оценивается как безымянная функция, которая, при вызове, возвращает сам код в виде строки (с
2
изменением на следующее число Фибоначчи).Это было удивительно сложно получить работу. Основная идея состоит в том, чтобы взять саму функцию (с
#0
) и заменить число в этой функции следующим, использующим/. v:2 :> nextFib[v]
. ТемnextFib
не менее, на данном этапе не будет оцениваться, поэтому мы не получим новый номер в исходном коде. Поработав некоторое время, чтобы выяснить, как добиться немедленной оценки, я нашел этот замечательный пост на Mathematica.SE . «Стандартный» метод используетWith
блок, который вызывает оценку, но второй ответ WReach содержит более короткую альтернативу с использованием недокументированного встроенного,RuleCondition
который также вызывает оценку.Мы вычисляем следующее число Фибоначчи, используя тот факт, что отношение последовательных чисел примерно равно золотому отношению 1,618 ... и это с точностью до округления. Поэтому нам не нужно отслеживать последние два числа, и мы можем просто это сделать
Round[GoldenRatio v]
. Это никогда не потеряет точность, поскольку MathematicaGoldenRation
является символическим значением и поэтомуRound
всегда может вычислить точный результат.В итоге:
Безымянная функция, где
#0
ссылается на сам объект функции.Найдите
2
в дереве выражений функции (это,2
конечно, соответствует самому себе), вызовите ееv
и замените на ...... следующий номер Фибоначчи.
И преобразовать полученное дерево выражений в его строковое представление.
источник
CJam , 26 байтов
Попробуйте онлайн!
Вероятно, не совсем оптимально. Мы просто повторяем последовательность Фибоначчи до тех пор, пока значение не станет больше последнего и используем результат в качестве нового значения в начале программы.
источник
Python 3 , 95 байт
Попробуйте онлайн!
Очевидно , ответвление от CJam Мартина Эндера .
источник
CJam , 20 байтов
Попробуйте онлайн!
источник
На самом деле , 19 байтов
Попробуйте онлайн!
Очевидно , ответвление от CJam Мартина Эндера .
источник
Python 3 ,
8179 байтПопробуйте онлайн!
Использует золотое сечение для расчета следующего числа
источник
Желе , 14 байт
Попробуйте онлайн! или проверьте все необходимые итерации .
Как это устроено
источник
Swift, 251 байт
Немного многословно для меня, но я не могу понять, как это сделать короче:
Ungolfed:
Моя проблема заключается в попытке получить цитаты вокруг новой версии
s
.источник
Чеддер , 136 байт
Попробуйте онлайн!
источник
Javascript (ES6),
15160 байтНовая версия, кредиты @ Leaky Nun
Старая версия :
На основании этого .
источник
x=i=>console.log('x='+x+';x('+(i*(5**.5+1)/2+.5|0)+')');x(2)
31000
не число Фибоначчи.постоянный ток , 35 байт
Версия с итерацией (56 байт):
источник
Swift, 235 байт
Это улучшенная версия Калеба «S ответа .
источник
Java (OpenJDK 8) , 239 байт
Попробуйте онлайн!
источник