Это было весело! Однако с тремя цифрами веселье закончилось слишком рано. Эта задача похожа, но мы продолжим веселье.
Соревнование
Выведите как можно больше цифр Золотого сечения φ. Золотое сечение определяется как число, которое удовлетворяет φ = (φ + 1) / φ, и первые 100 цифр определяются как:
1,6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Эта задача не о вычислении φ! Речь идет о печати как можно большего количества цифр без использования какого-либо метода для этого дважды. Так что найдите как можно больше творческих способов получить свои цифры!
ограничения
Само по себе печатание цифр φ было бы слишком простым, поэтому вот правила:
- Вы должны построить число по порядку слева направо , либо печатая его по частям, либо создавая строку слева направо и печатая ее в конце - вы даже можете сгенерировать массив цифр, а затем соединить его и распечатайте его, пока вы делаете это по порядку. В следующих правилах «печать» и «вывод» могут относиться к любому из этих процессов (например, если вы строите строку, и строка содержит
1.6
то, что считается1.6
уже напечатанным). - За ваш код вы получаете бюджет в 15 символов на цифру . Период не засчитывается в этот бюджет, но также должен быть напечатан. Обратите внимание, что ограничение распространяется только на общий размер кода: вы можете использовать более 15 символов для любой цифры, если вы не используете больше в среднем. На самом деле, вы можете создать «долг» в персонажах и «погасить его» позже. Например, для печати у
1.618
вас есть 60 символов. - Стандартные библиотеки include / import не учитываются в размере кода. Но вы не можете дать эти псевдонимы бесплатно!
- Вы не должны использовать цифру, которую вы в настоящее время генерируете, или те, которые вы уже напечатали. Например,
1
в вашем исходном коде может нигде не появляться, потому что это самая первая цифра. Код, который выводит8
in,1.618
может использовать любую или все цифры[0234579]
, но ни одну из[168]
. Для этой цели все литералы, которые эквивалентны одной цифре, обрабатываются как эта цифра . Так что, если ваш язык может представлять,9
как'\t'
вы не можете использовать это где-либо, где вы не могли бы использовать9
вместо этого. - Вы не должны производить несколько цифр одновременно. Должна быть возможность четко разделить ваш код на куски, которые генерируют одну цифру за раз.
Вы не должны ссылаться на какую - либо встроенную функцию, математический / логический / побитовый / строковый оператор, переменную или константу, которые вы использовали в коде, который сгенерировал более раннюю цифру. Исключением являются преобразование целых чисел в строку, конкатенация строк и функции печати, которые могут вам понадобиться для каждой отдельной цифры. Обратите внимание, что не имеет значения, под каким именем вы ссылаетесь на какое-либо встроенное: просто потому, что вы используете псевдоним встроенного в
PI
обоих,p
иq
это не значит, что вы можете использовать егоp
один раз иq
один раз. Кроме того, вы имеете право использовать имя дважды , если это относится к двум различным встроенным функциям, как строкаlength
и массивlength
.Если ваш язык программирования не имеет функций, используйте ваше лучшее суждение о том, каким будет эквивалент - например, для сценариев bash, при вызове других программ следует соблюдать правила, наложенные на функции
- Ваша заявка должна быть написана на одном языке. Поэтому не нужно выполнять переводчик другого языка, чтобы получить доступ к встроенным языкам.
Последствия
Следующие пункты все подразумеваются вышеуказанными правилами, но я добавляю их здесь, чтобы избежать вопросов, которые уже возникли в песочнице:
- Вам не разрешается перезаписывать части вашего вывода, печатая некоторые пробелы (обычно
'\b'
) между ними. - Циклы, которые генерируют / выводят несколько цифр, запрещены. (Циклы, которые вычисляют одну цифру, все же хорошо.)
- Использование запутанной версии
(1 + √5)/2
или деление чисел Фибоначчи для получения более чем одной цифры запрещено. - Вы не можете предварительно вычислить 10 цифр и сохранить их в 10 переменных, а затем просто ссылаться на них, потому что эти ссылки на переменные не генерируют цифру - код, заполняющий переменную, делает, что является нарушением правила 6.
- Фактически, вы не можете повторно использовать любые предыдущие (или промежуточные результаты), потому что это будет означать, что две цифры будут совместно использовать код для генерации .
- В противном случае вы можете использовать любые средства (которые не должны быть чисто математическими) для генерации цифр. (А ты должен!)
- На самом деле нет необходимости что-либо вычислять, если вы можете извлечь правильные цифры из разных мест, используя вашу стандартную библиотеку.
- Вы можете использовать оператор несколько раз, генерируя одну цифру, поэтому
2+2+2
будет честной игрой генерировать первую цифру6
(хотя она вряд ли самая короткая). - Вы можете использовать любые литералы так часто, как хотите, потому что они не являются встроенными константами. Поэтому до тех пор, пока вам не нужно печатать
5
, вы можете использовать5
в своем коде столько символов, сколько захотите. - Вы не можете жестко закодировать вывод, потому что это будет связано с использованием цифр, которые вы выводите.
Вкратце: не используйте метод генерации цифр дважды и не используйте цифру, которую вы выводите в данный момент или уже напечатали.
Если вы обнаружите лазейку, которая позволяет получить (квази) бесконечный счет, пожалуйста, не разрушайте задачу, используя ее, но дайте мне знать, чтобы я мог увидеть, можно ли исправить лазейку, не нарушая ничего.
счет
Программа, которая печатает наибольшее количество цифр, корректно побеждает. В случае связи более короткий код нарушает связь.
Пожалуйста, добавьте версию без комментариев, которая определяет, какая часть вашего кода генерирует какую цифру.
PS: если кто-то бьет 100 цифр выше, вот еще несколько .
x = (x+1)/x
(или x^2 = x+1
) (или x^2-x+1
).