Code golf zawsze zawiera odpowiedzi, które mniej lub bardziej naginają reguły, przełamując ograniczenia, które pretendenci wzięli za pewnik lub po prostu o tym nie pomyśleli i nie wymienili ich w przepisach. Jedną z tych interesujących luk jest możliwość wyjścia więcej niż wymaga wyzwanie, aby uzyskać lepszy wynik.
Biorąc to do końca, możemy napisać uniwersalny koder solvera do golfa, który drukuje pożądane dane wyjściowe - jeśli nie przejmujesz się, że może to potrwać wieki i wyświetla wiele innych rzeczy przed i po nim.
Wszystko, co musimy wygenerować, to sekwencja, która z pewnością zawiera wszystkie możliwe podsekwencje. Dla tego kodu golfowego będzie to sekwencja Ehrenfeucht-Mycielski :
Sekwencja zaczyna się od trzech bitów 010; każda kolejna cyfra jest tworzona przez znalezienie najdłuższego sufiksu sekwencji, który również pojawia się wcześniej w sekwencji, i uzupełnienie bitu po ostatnim wcześniejszym pojawieniu się tego sufiksu.
Każda skończona podsekwencja bitów zachodzi w sposób ciągły, nieskończenie często w obrębie sekwencji
Pierwsze kilka cyfr sekwencji to:
010011010111000100001111 ... (sekwencja A038219 w OEIS ).
Łącząc 8 bitów sekwencji w bajt, otrzymamy wyjście ASCII, które możemy wyprowadzić na ekran lub do pliku i które zawiera każde możliwe skończone wyjście . Program wyświetli fragmenty pi, teksty „Never will give you you” , jakąś fajną grafikę ASCII, własny kod źródłowy i wszystko inne, co chcesz, aby powstało.
Do testowania poprawności, oto skróty dla pierwszych 256 bajtów sekwencji:
MD5: 5dc589a06e5ca0cd9280a364a456d7a4
SHA-1: 657722ceef206ad22881ceba370d32c0960e267f
Pierwsze 8 bajtów sekwencji w zapisie szesnastkowym to:
4D 71 0F 65 27 46 0B 7C
Zasady:
Twój program musi wypisać sekwencję Ehrenfeucht-Mycielski (nic więcej), łącząc 8 bitów w bajt / znak ASCII.
Zwycięża najkrótszy program (liczba znaków). Odejmij 512 od liczby znaków, jeśli uda ci się wygenerować sekwencję w czasie liniowym na wygenerowany bajt .