Python + Piet one-liners: 417 caracteres + 7391 7107 ejecutando codeles
Este script de Python produce una imagen de 7393 x 2; el bloque 2x2 más a la derecha del cual es un "centinela" que termina el programa; así que no estoy contando esos; y la segunda fila es de otro modo blanca. Probablemente pueda seguir desarrollando el código piet usando cadenas de suma / resta / multiplicación en lugar del ingenuo algoritmo binario ... pero no quiero dar una solución a un rompecabezas futuro.
No voy a publicar la imagen aquí, debido a sus dimensiones ridículas. Si desea verlo, ejecute el código de Python y canalice la salida a un archivo .ppm. Luego, convierta el .ppm a .gif, y ejecute la salida en Rapapaing . (alternativamente, use un intérprete de Piet que no sea web y que asimile .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]
editar: jugó un poco el piet al reducir el peso de Hamming de los nombres de variables.
menos golf pre-quine :
Esta es una versión anterior, antes de darme cuenta de que podía convertirla en una frase. Es marginalmente más fácil de entender. La función P traduce un conjunto de instrucciones especiales en Piet; y la función p toma un número entero y produce una secuencia de instrucciones para crear ese número entero en la pila. Solo estoy usando las instrucciones =,+,:,|
, por lo que esto probablemente podría hacerse más eficiente ... pero me gusta tener un compilador Piet completo (de algún tipo) en la fuente.
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
es una quine en varios idiomas. Entonces podría decir que es un programa J que imprime un programa Golfscript que imprime un ...... y así sucesivamente.