Résumé
Un nouveau langage de manipulation de chaînes a été créé, utilisant uniquement les caractères $+#-!*|@>
! Votre tâche consiste à implémenter un interpréteur pour cela en aussi peu d'octets que possible.
Contribution
Une chaîne, qui est une seule ligne de cette langue. Cela peut être pris de toute manière raisonnable (stdin, paramètre de fonction, argument de ligne de commande, etc.), ou en tant que variable prédéfinie. Si le programme demande une entrée utilisateur, acceptez toutes les entrées utilisateur qu'il demande à stdin et rien de plus, voir ci-dessous. Vous pouvez supposer qu'il s'agit d'un programme valide.
Production
Quelle que soit la langue produite, les spécifications ci-dessous. Vous devez sortir une chaîne, de toute manière raisonnable (sortie standard, sortie de fonction, etc.) ou une valeur variable. Lorsque le langage sort explicitement, cela doit aller à stdout. Les failles standard sont interdites.
Spécifications linguistiques
Traitement et syntaxe
Le langage a une forme de traitement très simple car il ne fait que manipuler des chaînes: il commence par une chaîne vide ( ""
), et la change à chaque terme. Un terme est composé d'une ou deux parties: une fonction (ci-dessous) suivie éventuellement d'un paramètre (ci-dessous), qui modifie son comportement. Les termes sont séparés par des tuyaux ( |
). Vous pouvez supposer qu'il ne s'agira pas d'un programme vide et qu'aucun terme ne sera vide. Vous devez sortir la valeur à la fin du programme.
Les fonctions
La langue n'a que 6 fonctions, comme indiqué ci-dessous. Chaque fonction accepte un ou zéro paramètre.
+
concaténer des chaînes (prend un paramètre de chaîne, le concatène à la valeur actuelle)!
inverser l'ordre des caractères de la valeur actuelle (pas de paramètre)*
répéter la chaîne (prend un paramètre entier, répète la valeur actuelle autant de fois)-
supprime toutes les occurrences d'une valeur (prend un paramètre de chaîne, en supprime toutes les occurrences de la valeur actuelle)$
[pseudo-] mélange aléatoirement la valeur actuelle (aucun paramètre)<
sortie de la valeur actuelle versstdout
(pas de paramètres)
Valeurs
Ce sont les valeurs qui peuvent être transmises aux fonctions, représentées par des expressions rationnelles qui leur correspondraient:
@[^|]*
un littéral de chaîne, y compris tout caractère autre que des tuyaux. Il peut être vide.#[0-9]+
un littéral entier>
la ligne suivante destdin
. Si utilisé avec*
, convertissez en entier.
Cas de test
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Notez que le cas de test 2 est aléatoire, donc toute permutation des caractères qu'il contient est valide. De plus, les sorties du tableau sont séparées par des sauts de ligne, mais votre programme n'a pas à faire de même. La dernière valeur dans chaque cas est la sortie finale.
Exemple (non-golfé) d'interpréteur python
Essayez-le en ligne! IMO mieux si vous l'exécutez via IDLE ou tout ce que vous utilisez. (Je l'ai joué à 424 octets après, mais je suis sûr que vous pouvez faire mieux).
<
rencontrez. Est-ce obligatoire?
+@>#
? J'ai #
aussi utilisé .