Remarque: je suis prêt à donner une prime à toute réponse que je trouve intéressante.
Votre défi consiste à concevoir un ordinateur à un jeu d'instructions complet de Turing (OISC):
Un OISC est une machine abstraite qui utilise une seule instruction, ce qui évite d'avoir à utiliser un opcode en langage machine. Avec un choix judicieux pour l'instruction unique et des ressources infinies données, un OISC est capable d'être un ordinateur universel de la même manière que les ordinateurs traditionnels qui ont plusieurs instructions.
Voici quelques exemples de commandes uniques qui font un OISC complet de Turing.
Règles:
Vous devez fournir une interprétation ou une preuve de celle-ci
Vous devez fournir un interprète pour votre langue. Cet interpréteur ne doit être limité que par la mémoire / l'heure (par exemple, il ne doit pas avoir de restrictions imposées par l'utilisateur). Si vous ne fournissez pas d'interprète pour votre langue (pour une raison autre que la paresse), vous devez prouver qu'il est possible d'en rédiger un. Un interprète doit être possible .
Vous devez prouver son intégralité Turing
Vous devez inclure une preuve formelle que votre langue est Turing-complete. Un moyen simple de le faire est de prouver qu'il peut interpréter ou avoir le même comportement qu'un autre langage complet de Turing. La langue la plus élémentaire à interpréter serait Brainf ** k .
Par exemple, un langage normal qui a toutes les mêmes commandes que Brainf ** k (et le même manque de restrictions de mémoire imposées par l'utilisateur) est Turing-complete car tout ce qui peut être implémenté dans Brainf ** k peut être implémenté dans la langue .
Voici une liste de langages Turing-complete très simples à implémenter.
Exigences supplémentaires de l'OISC
Cet OISC ne doit avoir qu'une seule instruction - il ne peut pas avoir plusieurs instructions, l'une d'entre elles le rendant Turing-complet.
Votre OISC peut utiliser n'importe quelle syntaxe que vous aimez. Vous devez définir dans votre réponse ce qu'est une instruction, ce qui est des données et ce qu'est un no-op (par exemple un espace blanc). Sois créatif!
Les arguments ne doivent pas simplement être des entiers. Par exemple, /// est un bel exemple d'OISC complet de Turing.
La façon dont les entrées et les sorties sont prises et données vous appartient. La plupart des OISC implémentent les E / S via des emplacements de mémoire spécifiques, mais il peut y avoir d'autres moyens de le faire, et vous êtes encouragés à en trouver un.
Une réponse valide doit fournir un exemple de code dans votre OISC, soit en l'incluant dans le message, soit en établissant un lien vers un défi simple résolu dans la langue.
Vote
Votants, n'oubliez pas de ne pas voter de façon ennuyeuse. Exemples:
- Lenguage - équivalents
- Une implémentation d'un OISC existant (répondeurs, veuillez créer le vôtre!)
- Un "OISC" dans lequel le premier argument spécifie une commande à appeler ( exemple )
Cependant, vous devriez voter pour des soumissions créatives intéressantes, telles que:
- Un OISC basé sur une équation mathématique
- Un ZISC complet de Turing basé sur un réseau de neurones
- Un OISC dans lequel les E / S de sortie se produisent autrement que dans certains emplacements de mémoire
Gagnant
Comme pour le concours de popularité , la réponse avec le plus de votes gagne! Bonne chance!