Programa A :
"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd
O programa B tem mais de 8kB, tanto que o link quebra, para não colar a coisa toda. Aqui está uma amostra:
#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²
Não consegui encontrar uma maneira de fazer com que um NULbyte funcionasse, e é por isso que o programa B possui apenas 255 caracteres únicos. O programa B consiste essencialmente em 255 cópias de um único programa, onde um único byte irrelevante é alterado a cada vez e as primeiras 254 execuções são ignoradas.
Para a explicação, começarei com esta versão simplificada de A para que o B resultante seja mais fácil de discutir.
"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd
Este programa é baseado no jine japonês com capacidade de carga útil básica . A string no início contém uma duplicata do restante do programa, iQ ²insere uma cotação e duplicatas para criar uma representação de string de todo o programa e, em seguida, ¯23apara a si mesma e tudo o que está depois. A sequência resultante é um programa que gera o Programa A :
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Vou me referir a essa string como U.
A última linha de A duplica Uvárias vezes com uma pequena alteração a cada vez. Especificamente, para cada número Xno intervalo, [1...3]ele gera "#c" + Uonde cestá o caractere com o código X. O comportamento padrão do Japt é gerar as strings sem aspas e separadas por vírgulas; portanto, essa é a saída do nosso A simplificado (observe que há um byte imprimível entre cada um #e "iQ:
#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²
Vamos chamar isso de B simplificado .
B simplificado tem uma estrutura simples, alternando entre #ce U. Felizmente para esta resposta, cada um #ce Ué tratado como separado por vírgula, e nessa situação o comportamento disso é tudo, exceto o último U, não tem efeito na saída. A única parte do B simplificado que afeta a saída é esta:
"iQ ²¯23
3õ@i'#+Xd"iQ ²
O que é idêntico ao Uque já sabemos saídas A. simplificado
A única diferença entre A simplificado e o programa A é que, em vez de gerar cópias para o intervalo, [1...3]o programa real gera cópias para o intervalo [1...256]. Isso resulta em 256 versões de #ccada uma delas com um caractere diferente, embora a última versão "Ā" seja um caractere de vários bytes, portanto, não adiciona nenhum bytes exclusivo, mas tudo, exceto o último, Uainda é ignorado.