Python + Piet one-liners: 417 caractères + 7391 7107 codes d'exécution
Ce script Python produit une image de 7393 x 2; le bloc 2x2 le plus à droite est une "sentinelle" qui termine le programme; donc je ne compte pas ceux-là; et la deuxième rangée est autrement blanche. Je peux probablement jouer davantage au code piéton en utilisant des chaînes d’addition / soustraction / multiplication au lieu de l’algorithme binaire naïf ... mais je ne veux pas donner une solution à un futur casse-tête.
Je ne vais pas poster l'image ici, à cause de ses dimensions ridicules. Si vous voulez le voir, exécutez le code python et dirigez la sortie vers un fichier .ppm. Ensuite, convertissez le fichier .ppm en fichier .gif et exécutez la sortie sur Rapapaing . (alternativement, utilisez un interpréteur Piet non web qui parle .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]
edit: golfé le pied un peu en réduisant le poids de Hamming des noms variables.
pré-quine moins golfée :
Ceci est une version précédente, avant que je réalise que je pouvais en faire un one-liner. C'est un peu plus facile à comprendre. La fonction P traduit un jeu d'instructions spéciales en Piet; et la fonction p prend un entier et produit une séquence d'instructions pour créer cet entier sur la pile. Je n'utilise que les instructions =,+,:,|
, donc cela pourrait probablement être rendu plus efficace ... mais j'aime bien avoir un compilateur Piet complet (de toutes les sortes) dans le code source.
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
est une quine en plusieurs langues. Donc, vous pouvez dire que c'est un programme J qui imprime un programme Golfscript qui imprime un ...... et ainsi de suite.