Interpréter DOGO
DOGO est un langage de programmation moins connu. Bien que le DOGO original (un langage de blague d'un article Usenet) n'ait jamais été implémenté, un langage qui lui ressemble a été créé. Les commandes pour la langue sont:
+===========+================================================================+
| Command | Description |
+===========+================================================================+
| SIT | If the value of the current memory cell is 0, jump to STAY. |
+-----------+----------------------------------------------------------------+
| STAY | If the value of the current memory cell is not 0, jump to SIT. |
+-----------+----------------------------------------------------------------+
| ROLL-OVER | Select the next operation from the operation list. |
+-----------+----------------------------------------------------------------+
| HEEL | Execute the currently selected operation. |
+-----------+----------------------------------------------------------------+
Les opérations sont:
+========+=======================================================+====+
| Number | Description | BF |
+========+=======================================================+====+
| 0 | Increment current memory cell. | + |
+--------+-------------------------------------------------------+----+
| 1 | Decrement current memory cell. | - |
+--------+-------------------------------------------------------+----+
| 2 | Move to next memory cell. | > |
+--------+-------------------------------------------------------+----+
| 3 | Move to previous memory cell. | < |
+--------+-------------------------------------------------------+----+
| 4 | Input a byte and store it in the current memory cell. | , |
+--------+-------------------------------------------------------+----+
| 5 | Output the current memory cell as ASCII. | . |
+--------+-------------------------------------------------------+----+
Exemples
Bonjour le monde:
roll-over roll-over heel roll-over roll-over roll-over roll-over heel heel heel
heel heel heel heel heel heel sit roll-over roll-over roll-over heel roll-over
roll-over roll-over heel heel heel heel heel heel heel heel roll-over roll-over
heel roll-over roll-over roll-over roll-over roll-over heel roll-over roll-over
roll-over roll-over roll-over stay roll-over roll-over roll-over heel roll-over
roll-over heel roll-over roll-over roll-over heel roll-over roll-over roll-over
roll-over heel heel heel heel heel heel heel sit roll-over roll-over roll-over
heel roll-over roll-over roll-over heel heel heel heel roll-over roll-over heel
roll-over roll-over roll-over roll-over roll-over heel roll-over roll-over
roll-over roll-over roll-over stay roll-over roll-over roll-over heel roll-over
roll-over roll-over heel roll-over roll-over roll-over roll-over roll-over heel
roll-over heel heel heel heel heel heel heel roll-over roll-over roll-over
roll-over roll-over heel heel roll-over heel heel heel roll-over roll-over
roll-over roll-over roll-over heel roll-over roll-over roll-over heel heel heel
roll-over roll-over roll-over roll-over heel heel heel heel heel heel heel heel
sit roll-over roll-over roll-over heel roll-over roll-over roll-over heel heel
heel heel roll-over roll-over heel roll-over roll-over roll-over roll-over
roll-over heel roll-over roll-over roll-over roll-over roll-over stay roll-over
roll-over roll-over heel roll-over roll-over heel roll-over roll-over roll-over
heel heel heel roll-over roll-over roll-over roll-over heel heel heel heel heel
heel heel heel heel heel sit roll-over roll-over roll-over heel roll-over
roll-over roll-over heel heel heel heel heel heel heel heel heel roll-over
roll-over heel roll-over roll-over roll-over roll-over roll-over heel roll-over
roll-over roll-over roll-over roll-over stay roll-over roll-over roll-over heel
roll-over roll-over roll-over roll-over heel heel heel roll-over roll-over
roll-over roll-over heel roll-over roll-over roll-over roll-over heel heel heel
heel roll-over roll-over heel roll-over heel heel heel roll-over roll-over
roll-over roll-over roll-over heel roll-over roll-over heel heel heel heel heel
heel roll-over roll-over roll-over roll-over heel roll-over roll-over heel heel
heel heel heel heel heel heel roll-over roll-over roll-over roll-over heel
roll-over roll-over roll-over heel heel roll-over roll-over roll-over roll-over
heel roll-over roll-over roll-over roll-over roll-over heel
Règles
- Chaque soumission doit être soit un programme complet soit une fonction. S'il s'agit d'une fonction, elle doit pouvoir être exécutée en n'ajoutant que l'appel de fonction au bas du programme. Tout autre élément (par exemple, en-têtes en C) doit être inclus.
- Si c'est possible, veuillez fournir un lien vers un site en ligne où votre code peut être testé.
- Votre programme ne peut rien écrire
STDERR
(ou quelque chose de similaire). - Vous pouvez prendre des informations
STDIN
(ou l'alternative la plus proche dans votre langue), ou comme argument. - Les failles standard sont interdites.
Notation
Les programmes sont notés en octets . Le jeu de caractères par défaut est UTF-8, si vous en utilisez un autre, veuillez le spécifier.
Cela mis à part, il s'agit du code-golf , et le nombre d'octets le plus bas sera considéré comme le gagnant!
Soumissions
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Classement
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
Mise à jour:
Désolé de ne pas préciser les sit
et stay
commandes très bien. Ils sont, comme l'a dit @ user6245072, comme [
et ]
dans BF.
Mise à jour 2:
Pour clarifier les questions de @ KennyLau:
- L'opération par défaut est
0
. - La mémoire se compose de cellules 8 bits.
- Les cellules s'enroulent en cas de débordement / débordement.
- Une entrée est requise pour le fonctionnement 4.
la source
sit lie-down roll-over play-dead heel
1
indique "incrémenter la cellule suivante", mais le code BF correspondant est "décrémenter la cellule actuelle". Lequel est le comportement correct?Réponses:
Rubis, 287 octets
Fonctionne sur une bande infinie dans les deux sens. L'entrée DOGO est un fichier sur la ligne de commande. S'il n'y a pas d'argument de ligne de commande, un programme DOGO fonctionnera toujours s'il est transmis en tant que STDIN, sauf s'il utilise l'opération
3
(obtenir un octet de STDIN), auquel cas je n'en ai aucune idée. Quoi qu'il en soit, la saisie de fichiers est la meilleure.Suppose qu'aucun autre texte que les quatre commandes et les espaces n'existent dans le fichier programme.
Démonstration Hello World
la source
Python 3,
388398373371 octetsSuppose 256 cellules de mémoire. Juste une mise en œuvre simple, facilement battable, peut probablement être jouée plus. Essayez - le sur repl.it .
Merci à @EasterlyIrk de m'avoir fait réaliser que Python 3 est beaucoup plus court que Python 2.
EDIT: réalisé que je n'ai pris en compte que les dépassements / sous-dépassements lors de l'impression, pas en valeur réelle.
Merci à @ KevinLau-notKenney pour avoir économisé 25 (!) Octets avec des astuces d'opérateur de multiplication et d'inversion de liste
EDIT: -3 octets en mettant 256 dans une variable, -4 en jouant avec les opérateurs, +8 en s'assurant qu'il est en minuscules
la source
sys.stdout.write
? Pourquoi ne pasprint
?print(...,end='')