Inverse quine: imprime todo excepto tu programa
Escriba un programa que eventualmente, dado el tiempo suficiente, imprima todas las posibles permutaciones de caracteres ASCII (tanto imprimibles como no imprimibles) menores o iguales a su longitud, excepto él mismo. El texto del programa no debe aparecer en ninguna parte de su salida.
Por ejemplo, si su programa lo es abc, entonces parte de su salida podría verse así:
(many lines omitted)
ab0
ab1
ab2
...
abb
abd
(many lines omitted)
o
...[some character other than a]bcabacba5804g715^^*#0...
Si su idioma requiere caracteres que no son ASCII imprimibles (por ejemplo, Jelly o APL), imprima todas las combinaciones de caracteres en su página de códigos.
No es necesario que las cuerdas estén separadas entre sí; un solo carácter se puede contar como parte de varias cadenas. Podría intentar crear una superpermutación , que sería al menos \$95! + 94! + 93! + 95 − 3 = 1.04 × 10^{148}\$ caracteres de largo.
Se aplican las reglas estándar de quine (no leer el código fuente del programa) pero esto también es código golf.
Respuestas
Ruby , 92 91 bytes
eval$s=%q(a=*?\0..?\x7f;90.times{|i|puts a.product(*[a]*i).map(&:join)-["eval$s=%q(#$s)"]})
¡Pruébelo en línea!
Forma matrices que contienen todas las permutaciones de caracteres ASCII (puntos 00de código a 127) de longitud 1 a 91, luego resta de cada una la cadena eval$s=%q(#$s), que es equivalente al programa completo (debido a la cadena interpolada $s).
eval$s=%q( # evaluate $s, a (global) double-quoted string that contains most of the program
a=*?\0..?\x7f; # create array of ASCII characters 00 to 127
90.times{|i| # for permutations of length i = 1 to 91:
puts a.product(*[a]*i).map(&:join) # print all strings of length i...
-["eval$s=%q(#$s)"] # not equal to the full program
}
)
Perl 5 , 119 , 110 , 108 bytes
-9 bytes de longitud del código de codificación gracias a @Dingus.
$C=q(while(y///c<109){s/^\xff*(.?)/"\0"x$-[1].chr(''ne$1?1+ord$1:0)/es;"\$C=q($C);eval\$C"ne$_&&say});eval$C
¡Pruébelo en línea!
o para comprobar el caso cuando la salida está justo antes de la fuente