Le Défi
Écrire un programme qui agit comme un Fractran interprète. Le plus court interprète en nombre de caractères, dans n'importe quelle langue, est le gagnant. Votre programme doit prendre deux entrées: L'fractran programme d'être exécuté, et la saisie de l'entier n. Le programme peut être dans n'importe quelle forme qui est pratique pour votre programme - par exemple, une liste de 2-tuples, ou une liste à plat. La sortie doit être un entier, soit la valeur du registre à la fin de l'exécution.
Fractran
Fractran est trivial ésotérique langage inventé par John Conway. Un fractran programme consiste en une liste de fractions positives et de l'état initial n. L'interprète maintient un compteur de programme, initialement pointant vers la première fraction dans la liste. Fractran programmes sont exécutés de la manière suivante:
- Vérifier si le produit de l'état actuel et de la fraction actuellement sous le compteur de programme est un entier. Si elle est, il faut multiplier le courant de l'état par le courant de la fraction et de réinitialiser le compteur de programme pour le début de la liste.
- L'avance le compteur de programme. Si la fin de la liste est atteinte, arrêter la, sinon retourner à l'étape 1.
Pour plus de détails sur le comment et le pourquoi Fractran, reportez-vous à la esolang entrée et cette entrée sur maths bon/mauvais en mathématiques.
Vecteurs De Test
Programme: [(3, 2)]
Entrée: 72 (2332)
Sortie: 243 (3de 5)
Programme: [(3, 2)]
Entrée: 1296 (2434)
Sortie: 6561 (38)
Programme: [(455, 33), (11, 13), (1, 11), (3, 7), (11, 2), (1, 3)]
Entrée: 72 (2332)
Sortie: 15625 (56)
Bonus vecteur de test:
Votre présentation n'a pas besoin d'exécuter cette dernière correctement le programme pour être une réponse acceptable. Mais bravo si c'est le cas!
Programme: [(455, 33), (11, 13), (1, 11), (3, 7), (11, 2), (1, 3)]
Entrée: 60466176 (210310)
Sortie: 7888609052210118054117285652827862296732064351090230047702789306640625 (5100)
Soumissions Et De Notation
Les programmes sont classés uniquement par la longueur en caractères plus courte est la meilleure. N'hésitez pas à présenter à la fois un joliment présentés et documentés et une "compacte" version de votre code, afin que les gens peuvent voir ce qui se passe.
La langue " J " n'est pas recevable. C'est parce qu'il y a déjà une solution bien connue en J sur l'une des pages liées. Si vous êtes un J-ventilateur, désolé!
Comme un bonus supplémentaire, cependant, toute personne qui peut fournir un travail fractran interprète dans fractran recevrez un 500 réputation de point de bonus. Dans le cas peu probable de plusieurs auto-hébergement, les interprètes, l'un avec le plus petit nombre de fractions de recevoir la prime.
Les gagnants
L'officiel vainqueur, après avoir déposé une auto-hébergement fractran solution comprenant 1779 fractions, est Jesse Beder de la solution. Pratiquement parlant, la solution est trop lent à exécuter, même 1+1, cependant.
Incroyablement, cela a depuis été battu par un autre fractran solution - Amadaeus la solution de seulement 84 fractions! Il est capable d'exécuter les deux premiers cas de test dans une affaire de secondes lors de l'exécution sur ma référence Python solution. Il utilise une nouvelle méthode de codage pour les fractions, ce qui est également intéressant d'examiner de près.
Mentions honorables:
- Stephen Canon de la solution, en 165 caractères de x86 assemblée (28 octets de code machine)
- La jordanie solution dans 52 caractères de rubis qui manipule des entiers longs
- Inutile de solution dans 87 caractères de Python, qui, bien que pas le plus court Python solution, est l'une des rares solutions qui n'est pas récursive, et donc des poignées plus difficile de programmes avec facilité. Il est également très lisible.