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).
la source
<
rencontrez. Est-ce obligatoire?+@>#
? J'ai#
aussi utilisé .Réponses:
Rubis
-palF\|
,146142 octetsEssayez-le en ligne!
Réponse de Python de Port Brown . N'imprime pas les retours à la ligne après la sortie.
Comme d'habitude, la version Ruby 2.6 sera plus courte de 2 octets avec une indexation de plage infinie (
i[2..]
).la source
R ,
287286273269 octetsEssayez-le en ligne!
Code déroulé et explication:
la source
Python 2 ,
215219209208 octetsEssayez-le en ligne!
-4 car
raw_input
est requis.9 octets grâce à Incarnation de l'ignorance ; 1 octet d' Asci uniquement .
la source
raw_input
. Corrigez-moi si je me trompe ..input([prompt])
Equivalent à eval (raw_input (prompt)). Cette fonction ne détecte pas les erreurs utilisateur. Si l'entrée n'est pas syntaxiquement valide, une SyntaxError sera levée.C # (Visual C # Interactive Compiler) , 305 octets
Essayez-le en ligne!
la source
Perl 5
-MList::Util=shuffle -pF/\|/
,220217210183 octetsEssayez-le en ligne!
la source
Javascript,
292267 octetsJSFiddle
la source