Python + Piet one-liner: 417 caratteri + 7391 7107 codici di esecuzione
Questo script Python produce un'immagine 7393 x 2; il blocco 2x2 più a destra di cui è una "sentinella" che termina il programma; quindi non sto contando quelli; e la seconda riga è altrimenti bianca. Probabilmente posso golf ulteriormente il codice piet usando catene di addizione / sottrazione / moltiplicazione invece dell'algoritmo binario ingenuo ... ma non voglio dare una soluzione a un puzzle futuro.
Non pubblicherò qui l'immagine, a causa delle sue dimensioni ridicole. Se vuoi vederlo, esegui il codice Python e convoglia l'output in un file .ppm. Quindi, converti .ppm in .gif ed esegui l'output su Rapapaing . (in alternativa, utilizzare un interprete Piet non web che groks .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]
modifica: golf un po 'il piet riducendo il peso di Hamming di nomi di variabili.
meno pre-quine golfed :
Questa è una versione precedente, prima che mi rendessi conto che avrei potuto farne una linea. È leggermente più facile da capire. La funzione P traduce un'istruzione speciale impostata in Piet; e la funzione p accetta un numero intero e produce una sequenza di istruzioni per creare quel numero intero nello stack. Sto solo usando le istruzioni =,+,:,|
, quindi probabilmente questo potrebbe essere reso più efficiente ... ma un po 'mi piace avere un compilatore Piet completo (di sorta) nel sorgente.
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
è un quine in diverse lingue. Quindi potresti dire che è un programma J che stampa un programma Golfscript che stampa un ...... e così via.