Напишите программу с длиной n, которая выводит другую программу, длина которой является следующим числом Фибоначчи после n. Новая программа должна сделать то же самое - вывести другую программу, длина которой равна следующему числу Фибоначчи и т. Д.
Сама по себе (длина исходной программы) не обязательно должна быть числом Фибоначчи, хотя было бы неплохо, если бы оно было.
Самый короткий код выигрывает.
Никаких внешних ресурсов, только ASCII, бесплатный компилятор / интерпретатор не требуется.
Если ваш вывод заканчивается новой строкой, он также считается.
code-golf
quine
fibonacci
code-generation
уйти, потому что SE это зло
источник
источник
int
илиBigInteger
)Ответы:
CJam,
2623Я только что попробовал на вашем языке.
9 есть
(22*0.618 + 0.5 - 1)/1.618 + 1
.Он вычисляет свою собственную длину
*1.618
вместо того, чтобы повторно добавлять два числа. В первой версии он будет заполнять вывод до{
лайка1)))))))))
, который подсчитывает сами символы. Скажи результатn
. Общая длинаn+22
и новая длина{
должны быть(n+22)*1.618-22
округлены. Уменьшите его на единицу, чтобы посчитать число)
s. Тогда это будет примерно равно(n+8)*1.618
.Старая версия:
Число 14 есть
24*0.618 + 0.5 - 1
.источник
Python 2, 160 байт
Это настоящий квазихин; он не читает собственный источник, но генерирует его. Первый вывод (завершающий перевод строки):
Во-вторых:
Редактировать: Ой. Забыл изменить строку, когда я изменил с
;
s на1
s, поэтому во втором выводе были выведены дополнительные точки с запятой (которые Python не поддерживает). Исправленаисточник
CJam,
4131 байтПопробуйте онлайн.
Выход
Как это устроено
источник
Python - 89
Мой идеальный счет персонажа исчез . ; _; Спасибо TheRare за указание на новую строку и Quincunx за предложение использовать Python 2, сбривая 2 символа.
РЕДАКТИРОВАТЬ : теперь просто использует больше
#
s вместо1
s; 12 символов короче.РЕДАКТИРОВАТЬ 2 : 94 символов! Устранено некоторое повторение. >: 3
РЕДАКТИРОВАТЬ 3 : более короткая альтернатива repr для Python 2.
РЕДАКТИРОВАТЬ 4 : Вывод теперь короче.
РЕДАКТИРОВАТЬ 5 : Использование,
%r
чтобы сократить его было взято из ответа на другой вопрос @primo.РЕДАКТИРОВАТЬ 6 : короче. : D
Вот версия Python 3:
Этот ответ похож на ответ @Quincunx.
источник
print
всегда добавляет новую строку, если вы не укажетеend=''
аргумент.s,a,b="s,a,b=%s,%i,%i;o=s%%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'",89,144;o=s%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'
JavaScript, 94
Основанный на известном JavaScript Quine , он возвращает почти ту же функцию, за которой следует только количество слешей, так что он суммирует до 144, что является следующим числом Фибоначчи после N. И так далее ...
N не является числом Фибоначчи, но это было только «приятно иметь».
источник
p = (my answer)
а затемp = eval(p)
пару раз, и получил до 196418 года ... после этого время обработки составило> 1 сек, поэтому я прекратил тестирование: P Но я думаю, что оно может продолжаться еще дольше.p=eval(p)
, а проверяйp.length
. После того, как он достигает 987, я получаю длину 1598, а не число Фибоначчи.Mathematica
Это очень простая реализация (т. Е. Здесь нет обфускации). Это анонимная функция, которая возвращает себя с небольшим дополнением для достижения правильной длины. Mathematica гомоична: код и данные представлены в виде выражений Mathematica, что позволяет реально легко модифицировать / генерировать код на лету. Это также означает, что количество символов не является естественной мерой длины кода. Размер выражения ( «число листьев» ) есть. Эта версия основана на подсчете количества листьев в качестве меры длины кода.
Если мы назначим эту анонимную функцию переменной
f
(чтобы я мог показать, что происходит в удобочитаемой форме), и продолжаем вызывать ее 1, 2, 3, ... раз, каждый раз измеряя длину возвращаемого значения, это то, что мы получаем:Относительно требования бесплатного переводчика: Mathematica бесплатна для Raspberry Pi. В противном случае этот код должен быть простым для переноса на Mathics (с открытым исходным кодом) . Единственное, чего не хватает в математике, это то
InverseFunction
, что можно заменить, как здесь (но я ленивый :).источник
LeafCount
показалось мне гораздо более интересным, чем использование количества символов (что подразумевало бы скучную манипуляцию кодом как манипулирование строками). :-) Я не собираюсь менять его, чтобы использовать количество символов, но я могу удалить его без каких-либо плохих чувств, если хотите.Python 3.8 (предварительная версия) , 78 байт
Попробуйте онлайн!
Python 2 , 79 байт
Попробуйте онлайн!
источник