Це було весело! Однак із лише трьома цифрами розваги закінчилися занадто рано. Ця проблема схожа, але ми будемо продовжувати задоволення.
Змагання
Надрукуйте якомога більше цифр Золотого Коефіцієнта φ. Золоте співвідношення визначається як число, яке задовольняє φ = (φ + 1) / φ, і перші 100 цифр задаються:
1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
Ця задача не стосується обчислення φ! Йдеться про друк якомога більше цифр, не використовуючи жодного методу для цього двічі. Тому знайдіть якомога більше творчих способів отримати свої цифри!
Обмеження
Сама по собі надрукувати цифри φ було б занадто просто, тому ось такі правила:
- Ви повинні побудувати число в порядку зліва направо , друкуючи його по частинах або будуючи рядок зліва направо і друкуючи його в кінці - ви навіть можете генерувати масив знакових знаків, а потім приєднуватися до нього та друкуйте його, доки ви робите це в порядку. У наступних правилах "print" та "output" можуть посилатися на будь-який із цих процесів (наприклад, якщо ви будуєте рядок, а рядок містить такі,
1.6
які вважаються1.6
вже надрукованими). - За свій код ви отримуєте бюджет 15 символів на цифру . Період не враховується до цього бюджету, але його також слід надрукувати. Зауважте, що обмеження діє лише на загальний розмір коду: ви можете використовувати більше 15 символів для будь-якої цифри, доки в середньому ви не використовуєте більше. Насправді ви можете створити "борг" в символах і "погасити його" пізніше. Наприклад, для друку у
1.618
вас є 60 символів. - Стандартна бібліотека включає / імпорт не враховується до розміру коду. Але ви не можете безкоштовно надавати ці включає стенографічні псевдоніми!
- Ви не повинні використовувати цифру, яку ви зараз генеруєте, а також будь-яку, яку ви вже надрукували. Наприклад,
1
ніде у вихідному коді немає, оскільки це найперша цифра. Код, який виводить8
в,1.618
може використовувати будь-яку чи всі цифри[0234579]
, але жодна з[168]
. З цією метою всі літерали, еквівалентні одній цифрі, трактуються як ця цифра . Тож якщо ваша мова може представляти себе так,9
як'\t'
вам заборонено використовувати це де завгодно, де ви не можете використовувати9
замість цього. - Ви не повинні створювати кілька цифр одночасно. Слід чітко розділити код на шматки, які генерують одну цифру за раз.
Ви не повинні посилатися на будь - яку вбудовану функцію, математичний / булевий / біт-мудрий / рядковий оператор, змінну або константу, яку ви використовували в коді, що генерував попередню цифру. Виняток становлять цілі рядки для перетворення рядків, об'єднання рядків та функції друку, які можуть знадобитися для кожної цифри. Зауважте, що не має значення, під яким іменем ви посилаєтесь на будь-який вбудований: тільки тому, що ви псевдонім вбудований
PI
для обох,p
іq
не означає, що ви отримаєте використовуватиp
один раз іq
раз. Крім того, ви маєте право використовувати ім'я двічі , якщо це відноситься до двох різних вбудованим функціям, як рядокlength
і масивlength
.Якщо у вашій мові програмування немає функцій, використовуйте найкраще судження про еквівалент - наприклад, для баш сценаріїв, виклик інших програм повинен дотримуватися правил, накладених на функції
- Подання має бути написане однією мовою. Тож жоден виконавець іншої мови не перекладач, щоб отримати доступ до вбудованих даних цієї мови.
Наслідки
Наступні моменти мають на увазі вищезазначені правила, але я додаю їх сюди, щоб уникнути питань, які вже виникли в пісочниці:
- Вам заборонено перезаписувати частини виводу, друкуючи деякі зворотні простори (як правило
'\b'
) між ними. - Цикли, які генерують / виводять кілька цифр, заборонені. (Хоча петлі, які обчислюють одну цифру, добре.)
- Використовувати припущену версію
(1 + √5)/2
або ділити числа Фібоначчі для отримання більше однієї цифри заборонено. - Ви не можете заздалегідь обчислити 10 цифр і зберегти їх у 10 змінних, а потім просто посилатися на них, тому що ці посилання змінних не ' генерують цифру - код, який заповнює змінну, так що це порушення правила 6.
- Насправді, ви не можете повторно використовувати будь-які попередні (або проміжні результати), оскільки це означатиме, що дві цифри поділять код для створення .
- В іншому випадку ви можете використовувати будь-які засоби (які не повинні мати суто математичний характер) для отримання цифр. (І ти повинен!)
- Насправді немає необхідності нічого обчислювати, якщо ви можете витягнути правильні цифри з багатьох місць, використовуючи стандартну бібліотеку.
- Ви можете використовувати оператора кілька разів під час генерування однієї цифри, тому
2+2+2
справедлива гра для отримання першої6
(хоча це навряд чи найкоротша). - Ви можете використовувати будь-який буквальний стільки разів, скільки вам потрібно, оскільки вони не є вбудованими константами. Отже, поки вам не доведеться друкувати
5
, ви можете скільки завгодно5
s у своєму коді. - Ви не можете жорстко кодувати вихід, тому що це передбачає використання цифр, які ви виводите.
Коротше кажучи: не використовуйте жодного способу отримання цифр двічі і не використовуйте цифру, яку ви виводите в даний момент, або будь-яку, яка вже надрукована.
Якщо ви помітите лазівку, яка дозволяє отримати (квазі-) нескінченний бал, будь ласка, не руйнуйте виклик, використовуючи його, але дайте мені знати, щоб я міг бачити, чи можна виправити лазівку, нічого не порушуючи.
Оцінка балів
Виграє програма, яка надрукує найбільшу кількість цифр. У разі краватки, коротший код розривається.
Будь-ласка, додайте коментовану версію, яка не використовується, яка визначає, яка частина вашого коду генерує цю цифру.
PS: Якщо хтось переміг на 100 цифр вище, ось ще кілька .
x = (x+1)/x
(або x^2 = x+1
) (або x^2-x+1
).