Contexte
Fractran est un langage de programmation ésotérique complet de Turing inventé par John Conway. Un programme Fractran consiste en une liste ordonnée de fractions. Le programme commence par prendre un seul entier en entrée. À chaque itération du programme, il recherche dans la liste la première fraction de telle sorte que la multiplication du nombre par cette fraction produit un autre entier. Il répète ensuite ce processus avec le nouveau numéro, en commençant au début de la liste. Lorsqu'il n'y a aucune fraction sur la liste qui peut être multipliée par le nombre, le programme se termine et donne le nombre en sortie.
La raison pour laquelle Fractran est Turing-complete est qu'il simule une machine de registre. La factorisation principale du nombre stocke le contenu des registres, tandis que la division et la multiplication sont un moyen d'ajouter et de soustraire conditionnellement des registres. Je recommanderais de lire l'article Wikipedia (lié à ci-dessus).
Le défi
Votre tâche consiste à écrire le programme le plus court possible qui peut prendre un programme Fractran valide de STDIN comme seule entrée et génère un programme BF valide dans STDOUT qui simule le programme Fractran. Il existe deux façons de simuler un programme Fractran avec BF.
REMARQUE: votre réponse n'est pas un programme BF. Votre réponse est le code qui génère le programme BF à partir de n'importe quel programme Fractran donné. L'objectif est que le programme BF soit l'équivalent du programme Fractran. (techniquement, vous pourriez faire la compétition en BF, mais ce serait difficile)
Option 1
Votre programme doit générer un programme BF qui effectue les opérations suivantes:
- Prend exactement 1 nombre de STDIN sous la forme du caractère ASCII correspondant (en raison de la façon dont fonctionne l'entrée BF), qui est l'entrée du programme Fractran.
- Imprime exactement 1 nombre dans STDOUT sous la forme du caractère ASCII correspondant, qui est la sortie du programme Fractran.
Cette option est destinée à représenter les entrées et sorties exactes d'une machine virtuelle Fractran.
Option 2
Le code BF que votre programme produit doit effectuer les opérations suivantes:
- Prenez l'entrée en ayant la factorisation principale du nombre déjà encodé en mémoire (avant d'exécuter le programme). Si l'entrée est 28 (2 * 2 * 7), alors il y aura une valeur de 2 dans la deuxième cellule et une valeur de 1 dans la septième cellule (le pointeur commence sur la cellule 0). Toutes les autres cellules seront nulles.
- Donnez la sortie en ayant la factorisation principale de la sortie encodée en mémoire lorsque le programme se termine. Si la sortie est 10, alors il doit y avoir une valeur de 1 dans chacune des cellules 2 et 5. Toutes les autres cellules en nombre premier doivent avoir une valeur de zéro. Le contenu des autres cellules n'a pas d'importance.
Cette option représente le modèle informatique derrière le langage Fractran.
Règles et exigences
- L'entrée (en haut de votre programme) sera une liste de fractions sur STDIN. Il y aura une fraction par ligne avec une virgule entre le numérateur et le dénominateur. Une ligne vide représente la fin de l'entrée. Les fractions seront toujours réduites aux termes les plus bas.
- La sortie de votre programme doit être un programme BF valide sur une seule ligne vers STDOUT. Ce programme devrait être capable de simuler ce programme Fractran particulier selon l'une des deux options. Pour toute entrée, le programme BF généré doit pouvoir produire la même sortie que le programme Fractran.
- Vous devez indiquer quelle option vous avez choisie.
- Vous pouvez choisir les limites de la mémoire et de la bande BF et indiquer si elles sont
- CODE GOLF. En outre, la taille des programmes BF générés n'a pas d'importance, seule la taille du programme qui effectue la conversion.
- Les programmes ne doivent être composés que d'ASCII imprimables
Si je suis ambigu quelque part, n'hésitez pas à demander. C'est un défi très compliqué à décrire.
De plus, veuillez publier le code BF généré par votre programme pour l'entrée suivante, afin de fournir un moyen facile de vérifier si votre programme fonctionne:
33,20
5,11
13,10
1,5
2,3
10,7
7,2
Ce programme calcule le nombre de 1 dans l'expansion binaire d'un nombre. Cependant, l'entrée et la sortie sont formatées étrangement (comme avec tous les programmes Fractran). L'entrée est de la forme 2 ^ A, tandis que la sortie est de la forme 13 ^ B.