Contexte
Comme le savent la plupart des habitués des PPCG, un quine est un programme qui génère son propre code source lors de son exécution. et la distance de Levenshtein entre deux chaînes est le nombre minimal d'insertions, de suppressions et de modifications nécessaires pour changer une chaîne en une autre. Dans ce défi, nous combinons les deux concepts dans une "levenquine": un programme qui génère son propre code source, mais avec une instance d'un caractère inséré, supprimé ou remplacé par un autre caractère. (En d’autres termes, la distance de Levenshtein entre le programme et sa sortie est égale à 1).
La tâche
Écrivez une levenquine de sorte que sa sortie soit une levenquine, le résultat de ce programme est également une levenquine, et ainsi de suite. De plus, à un moment donné, la séquence d'exécution répétée du programme, de sa sortie, de sa sortie, etc. doit finalement revenir au programme d'origine.
Une restriction supplémentaire rend les choses beaucoup plus difficiles: il doit y avoir deux programmes distincts quelque part dans ce cycle qui n'ont pas de caractères en commun (en d'autres termes, aucun caractère n'existe dans un programme et existe également dans l'autre programme). Votre programme va donc devoir se transformer progressivement en un jeu de caractères différent, et inversement.
Si vous utilisez un langage de programmation qui nécessite inévitablement un passe-partout dans tout programme produisant une sortie (par exemple, il n'a qu'un seul moyen d'écrire une print
instruction et aucune autre forme utile de sortie), vous pouvez considérer ce passe-passe comme inexistant à cette fin. de déterminer quels personnages deux programmes ont en commun. Cependant, vous devez toujours compter ce passe-partout pour déterminer la propriété de Levenquine du code.
Des clarifications
- Chacun des "programmes" du cycle peut être un programme complet ou une fonction. Ils ne doivent pas tous être identiques, par exemple, certains peuvent être des programmes complets et d'autres des fonctions.
- Tous les programmes du cycle ne doivent pas nécessairement utiliser la même forme de sortie. Par exemple, certains peuvent sortir via une sortie standard et d'autres via une erreur standard.
- Vos programmes seront exécutés sans entrée (ou dans des langues qui nécessitent une entrée pour faire quoi que ce soit, l'entrée la plus simple possible).
- Des règles appropriées s'appliquent; bien que la Levenquine ne soit pas une vraie quine, vous ne pouvez rien faire qui soit illégal en écrivant une bonne quine. En particulier, le programme null n'est jamais une sortie valide d'une Levenquine appropriée (et ne peut donc pas faire partie de votre cycle).
- La restriction de Levenquine est mesurée en termes de caractères plutôt qu'en octets (par exemple,
ê
un caractère même lorsque la source est codée en UTF-8). La restriction de non-caractères-en-commun est également mesurée en termes de caractères. La condition de victoire compte toutefois en octets.
Condition de victoire
Veuillez soumettre au moins les trois programmes suivants du cycle: le programme le plus court (mesuré en octets); et deux programmes du cycle qui n'ont pas de caractères en commun. Il est possible que deux d'entre eux soient identiques et il est également possible que les trois soient distincts. Le score est basé sur la longueur en octets du programme le plus court, le plus court étant le meilleur, ce qui en fait une sorte de compétition de code-golf .
Réponses:
Gol> <> ,
252167 octetsEssayez-le en ligne!
Et le programme mutuellement distinct ( vérification ):
Essayez-le en ligne!
Ceci est principalement inspiré par ma réponse au défi Mutuellement Exclusif de Quines , les félicitations allant également à la réponse de Bubbler Gol> <> .
Voici un programme de vérification que vous pouvez exécuter. Malheureusement, le délai expire, mais vous pouvez voir comment une section de code génère l’autre section, puis vous pouvez copier la dernière version imprimée et la coller dans l’entrée pour continuer. Finalement, vous atteindrez le premier programme que vous avez mis en place.
Explication
Les deux sections de code sont composées de deux sections, la partie d'exécution réelle et les données contenant l'autre section de code. Ils fonctionnent tous les deux pratiquement de la même manière:
Ils dépendent d'un drapeau (le premier caractère du code,
1
ou0
). Si le drapeau est défini, ils commenceront à créer l'autre section de code en supprimant le 252ème caractère, en ajoutant / soustrayant28
de celui-ci et en l'ajoutant au code.Par exemple, voici les deux premières itérations du code après le premier programme ci-dessus:
Finalement, lorsqu'il atteint la fin de la section en cours, il retourne le second caractère du code (
<
vers>
et de nouveau) pour pointer sur l'autre section.Voici les deux sections ensemble, sur le point de passer de l’exécution de la première à l’exécution de la seconde.
Essayez-le en ligne!
Les indicateurs sont opposés pour chaque section, de sorte que la nouvelle section en cours d'exécution commence à supprimer l'autre section de code jusqu'à ce qu'elle atteigne son propre code. À ce stade, le drapeau est retourné et le cycle se répète à nouveau.
la source