Programme A :
"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd
Le programme B fait plus de 8 Ko, si long que le lien se brise, donc je ne collerai pas le tout. Voici un exemple:
#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²
Je ne pouvais pas trouver un moyen de faire fonctionner un NULoctet, c'est pourquoi le programme B n'a que 255 caractères uniques. Le programme B consiste essentiellement en 255 copies d'un seul programme, où un seul octet non pertinent est changé à chaque fois, et les 254 premières exécutions sont ignorées.
Pour l'explication, je vais commencer par cette version simplifiée de A afin que le B résultant soit plus facile à discuter.
"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd
Ce programme est basé sur le quine Japt de base capable de charge utile . La chaîne au début contient un doublon du reste du programme, iQ ²insère une citation et des doublons pour créer une représentation sous forme de chaîne de l'ensemble du programme, puis se ¯23coupe lui-même et tout ce qui se trouve après. La chaîne résultante est un programme qui génère le programme A :
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Je ferai référence à cette chaîne comme U.
La dernière ligne de A duplique Uun tas de fois avec un petit changement à chaque fois. Plus précisément, pour chaque numéro Xde la plage, [1...3]il affiche "#c" + Uoù se ctrouve le caractère avec le code de char X. Le comportement par défaut de Japt est de sortir ces chaînes sans guillemets et séparées par des virgules, c'est donc la sortie de notre A simplifié (notez qu'il y a un octet non imprimable entre chaque #et "iQ:
#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²
Nous l'appellerons B simplifié .
Le B simplifié a une structure simple, alternant entre #cet U. Heureusement pour cette réponse, chacun #cet Uest traité comme séparé par une virgule, et dans cette situation, le comportement de tout est sauf le dernier Un'a aucun effet sur la sortie. La seule partie de Simplified B qui affecte la sortie est la suivante:
"iQ ²¯23
3õ@i'#+Xd"iQ ²
Ce qui est identique à Ucelui que nous connaissons déjà des sorties simplifiées A.
La seule différence entre Simplified A et Program A est qu'au lieu de générer des copies pour la plage, [1...3]le programme réel génère des copies pour la plage [1...256]. Cela se traduit par 256 versions de #cchacune d'entre elles ayant un caractère différent, bien que la dernière version "Ā" soit un caractère multi-octets, de sorte qu'il n'ajoute aucun octet unique, mais tout sauf le dernier Uest toujours ignoré.