Это было весело! Однако с тремя цифрами веселье закончилось слишком рано. Эта задача похожа, но мы продолжим веселье.
Соревнование
Выведите как можно больше цифр Золотого сечения φ. Золотое сечение определяется как число, которое удовлетворяет φ = (φ + 1) / φ, и первые 100 цифр определяются как:
1,6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Эта задача не о вычислении φ! Речь идет о печати как можно большего количества цифр без использования какого-либо метода для этого дважды. Так что найдите как можно больше творческих способов получить свои цифры!
ограничения
Само по себе печатание цифр φ было бы слишком простым, поэтому вот правила:
- Вы должны построить число по порядку слева направо , либо печатая его по частям, либо создавая строку слева направо и печатая ее в конце - вы даже можете сгенерировать массив цифр, а затем соединить его и распечатайте его, пока вы делаете это по порядку. В следующих правилах «печать» и «вывод» могут относиться к любому из этих процессов (например, если вы строите строку, и строка содержит
1.6то, что считается1.6уже напечатанным). - За ваш код вы получаете бюджет в 15 символов на цифру . Период не засчитывается в этот бюджет, но также должен быть напечатан. Обратите внимание, что ограничение распространяется только на общий размер кода: вы можете использовать более 15 символов для любой цифры, если вы не используете больше в среднем. На самом деле, вы можете создать «долг» в персонажах и «погасить его» позже. Например, для печати у
1.618вас есть 60 символов. - Стандартные библиотеки include / import не учитываются в размере кода. Но вы не можете дать эти псевдонимы бесплатно!
- Вы не должны использовать цифру, которую вы в настоящее время генерируете, или те, которые вы уже напечатали. Например,
1в вашем исходном коде может нигде не появляться, потому что это самая первая цифра. Код, который выводит8in,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).