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