Код гольфу завжди містить деякі відповіді, які згинають правила більш-менш, порушуючи обмеження, які претенденти сприйняли як належне або просто не замислювались і не перераховували в правилах. Однією з таких цікавих лазівки є можливість отримати більше, ніж вимагає завдання, щоб отримати кращий результат.
Доводячи це до крайнощів, ми можемо написати універсальний кодовий вирішувач для гольфу, який друкує бажаний результат - якщо вам не байдуже, що це може зайняти віки та виводить безліч інших матеріалів до і після нього.
Все, що нам потрібно для виведення, - це послідовність, яка гарантовано містить усі можливі послідовності. Для цього коду гольфу це буде послідовність Еренфюхт-Міцельський :
Послідовність починається з трьох біт 010; кожна наступна цифра формується шляхом знаходження найдовшого суфікса послідовності, який також з’являється раніше в послідовності, і доповнює біт після останнього попереднього появи цього суфікса.
Кожна кінцева послідовність бітів відбувається безперервно, нескінченно часто в межах послідовності
Перші кілька цифр послідовності:
010011010111000100001111 ... (послідовність A038219 в OEIS ).
Комбінуючи 8 біт послідовності в байт, ми отримаємо ASCII вихід, який ми можемо вивести на екран або у файл, який містить усі можливі кінцеві результати . Програма виведе частини пі, тексти пісень «Ніколи не відмовляться від тебе» , приємне мистецтво ASCII, власний вихідний код та все інше, що ти можеш отримати.
Щоб перевірити правильність, ось хеши для перших 256 байт послідовності:
MD5: 5dc589a06e5ca0cd9280a364a456d7a4
SHA-1: 657722ceef206ad22881ceba370d32c0960e267f
Першими 8 байтами послідовності в шістнадцятковій нотації є:
4D 71 0F 65 27 46 0B 7C
Правила:
Ваша програма повинна виводити послідовність Еренфеухта-Мікельського (нічого іншого), поєднуючи 8 біт до символу байт / ASCII.
Виграє найкоротша програма (кількість символів). Віднімайте 512 з вашого числа символів, якщо вам вдається генерувати послідовність в лінійний час на генерований байт .