Python + Piet one- liners : 417 znaków + 7391 7107 wykonujących kodery
Ten skrypt w języku Python tworzy obraz 7393 x 2; najbardziej wysunięty w prawo blok 2x2 to „wartownik” kończący program; więc ich nie liczę; a drugi rząd jest poza tym biały. Prawdopodobnie uda mi się zagrać w golfa w dół, używając łańcuchów dodawania / odejmowania / mnożenia zamiast naiwnego algorytmu binarnego ... ale nie chcę podawać rozwiązania przyszłej układanki.
Nie zamierzam zamieszczać tutaj zdjęcia ze względu na jego absurdalne wymiary. Jeśli chcesz to zobaczyć, uruchom kod Pythona i potokuj dane wyjściowe do pliku .ppm. Następnie przekonwertuj .ppm na .gif i uruchom dane wyjściowe w Rapapaing . (alternatywnie, użyj nie-internetowego interpretera Piet, który mierzy .ppm)
A='P=lambda A:reduce(lambda(D,H,B),P:(D[P/3:]+D[:P/3],H[P%3*2:]+H[:P%3*2],B+"".join("%i "%H[(D[0]/P)%2]for P in[1,2,4])),map(" A ! @ B".find,A),([1,3,2,6,4,5],[0,192,192,255,0,255],"P3 %i 2 255 "%(len(A)+2)))[2]+"255 "*4+"0 0 "+"255 "*len(A)*3+"255 0 0 "*2;B=lambda D:["@!%s","@@!%s!"][D%2]%B(D/2)if 1<D else"";print P("".join("A%sB"%B(ord(D))for D in"A=%s;exec A[:-13]"%`A`)+" ");exec A[:-13]';exec A[:-13]
edycja: trochę grałem w golfa, zmniejszając wagę Hamminga nazw zmiennych.
pre-quine mniej golfa :
To jest poprzednia wersja, zanim zdałem sobie sprawę, że mogę zrobić z niej jedną linijkę. Jest to nieco łatwiejsze do zrozumienia. Funkcja P tłumaczy specjalny zestaw instrukcji na Piet; a funkcja p przyjmuje liczbę całkowitą i tworzy sekwencję instrukcji, aby utworzyć tę liczbę całkowitą na stosie. Używam tylko instrukcji =,+,:,|
, więc to może być prawdopodobnie bardziej wydajne ... ale trochę lubię mieć kompilator Piet z pełną wersją (swego rodzaju) w źródle.
s="""def P(s):
l=len(s)+1;R="P3 %i 2 255 "%(l+2);C=[1,3,2,6,4,5];V=[0,192,192,255,0,255]
for x in map("=|^+-*/%~>.,:@$?#!".find,"="+s):
C=C[x//3:]+C[:x//3];V=V[x%3*2:]+V[:x%3*2]
for i in [1,2,4]:R+="%i "%V[(C[0]//i)%2]
return R+"255 "*4+"0 0 "+"255 "*l*3+"255 0 0 "*2
p=lambda x:[":+%s","::+%s+"][x%2]%p(x/2)if x/2 else""
print P("".join("|%s!"%k(ord(c))for c in "s="+`s`+";exec s[:-13]"))
exec s[:-13]"""
exec s[:-13]
1
jest quine w kilku językach. Można więc powiedzieć, że jest to program J, który drukuje program Golfscript, który drukuje ...... i tak dalej.