Votre tâche consiste à créer le programme le plus court (A) qui génère un autre programme (B) avec les octets les plus uniques, qui à son tour génère le programme d'origine (A). Essentiellement, vous jouez à la moitié d'une paire de programmes ouroboros (aka quine d'itération périodique) et jouez à l'autre moitié. A et B peuvent être dans des langues différentes.
Règles et notation
Votre score final est <number of unique bytes in B> / <number of bytes in A>
. Le score le plus élevé l'emporte. Il convient de noter que le score maximum théorique est de 256.
- Le programme A doit comporter au moins un octet
- Le programme B ne peut pas être entièrement composé de non-opérations, c'est-à-dire qu'au moins un caractère doit affecter la sortie d'une manière ou d'une autre.
- Les règles standard de quines s'appliquent aux deux programmes. Notamment, les quines d'erreur ne sont pas autorisées dans les deux cas.
Par souci de cohérence du format de réponse, commencez votre réponse par quelque chose comme ceci:
# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
code-golf
code-challenge
quine
code-bowling
Beefster
la source
la source
aaaaa
a un octet unique etabcde
5 octets uniques.Réponses:
Japt & Japt , Score: 255/38 = 6,71
Programme A :
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:
Je ne pouvais pas trouver un moyen de faire fonctionner un
NUL
octet, 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.
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¯23
coupe 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 :Je ferai référence à cette chaîne comme
U
.La dernière ligne de A duplique
U
un tas de fois avec un petit changement à chaque fois. Plus précisément, pour chaque numéroX
de la plage,[1...3]
il affiche"#c" + U
où sec
trouve le caractère avec le code de charX
. 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
:Nous l'appellerons B simplifié .
Le B simplifié a une structure simple, alternant entre
#c
etU
. Heureusement pour cette réponse, chacun#c
etU
est traité comme séparé par une virgule, et dans cette situation, le comportement de tout est sauf le dernierU
n'a aucun effet sur la sortie. La seule partie de Simplified B qui affecte la sortie est la suivante:Ce qui est identique à
U
celui 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#c
chacune 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 dernierU
est toujours ignoré.la source
27
doit être modifié chaque fois que des octets sont enregistrés, mais à part cela, il semble que cela fonctionne.Programme A, Gol> <> , 256/20 octets = 12,8
Essayez-le en ligne!
Programme B, Gol> <>
Essayez-le en ligne!
Le programme alterne entre la sortie elle-même suivie de chaque octet et juste la sortie elle-même.
Explication:
la source
Programme A: 05AB1E , score:
256/41256/31 octets = 8,258 ...Essayez-le en ligne.
Programme B: 05AB1E
Essayez-le en ligne.
Explication:
Le quine le plus court pour 05AB1E est celui-ci:
0"D34çý"D34çý
( 14 octets ) fourni par @OliverNi . Ma réponse utilise une version modifiée de cette quine en ajoutant₅Ýç'q†vy27ǝD}J
.Le programme B se terminera dès qu'il atteindra le
q
, donc le programme B réel est:Tout ce qui suit est ignoré et le haut de la pile (
0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ
) est implicitement affiché.la source