Nous l'avons tous fait, eh bien, peut-être pas, mais créer votre propre langue étrangère et votre système de numérotation est un aliment de base de l'écriture particulièrement fantastique, mais c'est surtout une activité amusante.
La tâche est simple, prenez deux entrées:
Une entrée de liste ordonnée de 10 [dix] «chiffres» uniques (n'importe quel caractère ASCII imprimable) et les interpréter, dans l'ordre, comme les valeurs 0, 1, 2, 3, ..., 9
+ Il y a des exceptions à ce qui peut être un chiffre ici. Les opérateurs arithmétiques (+, -, *, /), les parenthèses et les espaces ne peuvent pas être utilisés comme l'un des nombres.
Un problème arithmétique utilisant uniquement ces «chiffres»
Et sortez le résultat entier équivalent sous la forme donnée.
Voici un exemple:
INPUT
abcdefghij
bcd + efg + hij
OUTPUT
bdgi
Dans l'exemple, la liste d'entrée (vous pouvez choisir sous quelle forme la liste entre) de 'abcdefghij' correspond à '0123456789' tout comme 'hjkloiwdfp' correspondrait également 1 à 1 avec '0123456789' où au lieu de 'a' s'associer à zéro, «h» le fait. L'arithmétique suivante «se traduit» par 123 + 456 + 789, ce qui équivaut à 1368. Cela doit ensuite être sorti sous la forme que nous lui avons donnée, donc b (qui représente 1) d (pour 2) g (pour 6) et i (pour 8).
CAS D'ESSAI
abcdefghij
abc + def - ghij
-gedc
qwertyuiop
qwerty / uiop
e
%y83l;[=9|
(83l * 9) + 8%
y9|8
PLUS DE RÈGLES
- Les échappatoires standard sont interdites!
- C'est le golf de code, donc les réponses les plus courtes en octets gagnent.
- Doit être un programme ou une fonction complète prenant les entrées et les sorties dans le format qui vous convient le mieux. (Ne peut tout simplement pas ajouter des informations supplémentaires dans les entrées, juste des «chiffres» et l'expression.
- Utilisez n'importe quelle langue que vous souhaitez (tant qu'elle est conforme aux autres règles)
la source
q.ioiopewioyetqorw...
. Si oui, quel type d'arrondi faut-il appliquer?1
pour5/3
, not2
, en raison d'une division entière (pas d'arrondi). Cela n'invalide pas le défi, mais vous devrez peut-être autoriser différentes réponses acceptables pour le même scénario de test (voir ma réponse T-SQL ci-dessous).Réponses:
05AB1E ,
109 octets(Maintenant) sort sous forme de liste de caractères.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
La nouvelle version de 05AB1E est build is build in Elixir . La
.E
fonction appelleracall_unary(fn x -> {result, _} = Code.eval_string(to_string(x)); result end, a)
, oùCode.eval_string
est un Elixir intégré .Notez que la version héritée de 05AB1E ne fonctionnera pas pour cela, car elle est construite en Python. Les nombres avec des 0 en tête ne seront pas évalués:
voir tous les cas de test dans la version héritée (qui utilise la version 10 octets car la fonction
Åв
intégrée est nouvelle).la source
R , 58 octets
Essayez-le en ligne!
Utilise la traduction de caractères
chartr
pour permuter les chiffres,parse
s eteval
s l'expression, puischartr
s pour revenir aux chiffres d'origine.Si l'arrondi à l'entier le plus proche est requis, c'est
R , 65 octets
Essayez-le en ligne!
la source
[
d'un nom plus court pour une fonction à 3 paramètres est très intelligente. Bien joué.T-SQL, 117 octets
Les sauts de ligne sont uniquement à des fins de lisibilité.
L'entrée se fait via un tableau préexistant t avec les colonnes de texte c (caractères) et e (équation), selon nos règles IO .
Utilise la fonction SQL 2017
TRANSLATE
pour basculer entre les caractères et générer une chaîne qui contient non seulement l'équation, mais le code à traduire en caractères d'origine:Cette chaîne est ensuite évaluée à l'aide de
EXEC()
.Il peut y avoir certains caractères (comme une seule citation
'
) qui briseraient ce code; Je n'ai pas testé tous les caractères ASCII possibles.Par le défi, j'évalue l'expression comme donnée, sous réserve de la façon dont ma langue interprète ces opérateurs. En tant que tel, le deuxième cas de test renvoie 1 (
w
) et non 2 (e
), en raison de la division entière.la source
Perl 6 , 38 octets
Essayez-le en ligne!
Je ne sais pas comment l'arrondi est censé fonctionner. S'il arrondit à la fin, je peux ajouter
.round
pour +6 octets . Si le comportement de/
doit être différent, il peut être plus long. Prend l'entrée au curry commef(arithmetic)(numerals)(arithmetic)
.Explication:
la source
Stax ,
746665 octetsExécuter et déboguer
Stax ne fait pas bien ici, faute d'une véritable instruction "eval". Il en a un qui s'appelle "eval" dans la documentation, mais il ne fonctionne que sur les valeurs littérales, pas sur les expressions complètes.
la source
Bash, 97 octets
Cela pourrait être moins si nous pouvions tronquer plutôt qu'arrondir. Il est également difficile de gérer les zéros non significatifs (comme dans le cas de test n ° 2) car Bash interprète les nombres commençant par 0 comme octal.
la source
tr
fait partie des coreutils, alors qu'ilbc
ne l'est pas. Néanmoins,bc
est un outil très courant. Toutes les autres commandes de cette réponse sont bash.$T
n'est plus courte que d'un octet0-9
, vous ne l'utilisez que deux fois et vous dépensez 8 octets pour la définir.Bean ,
9490 octetsHexdump
Javascript
Explication
Ce programme affecte implicitement les première et deuxième lignes d'entrée sous forme de chaînes aux variables
a
etb
respectivement.Chaque caractère
c
en ligneb
est remplacé par l'index respectifi
du caractère trouvé en lignea
, ou lui-même s'il n'est pas trouvé.Ensuite, il supprime chaque séquence d'un ou plusieurs
0
s précédée d'une limite de la chaîne résultante. Ceci pour empêchereval()
d'évaluer toute séquence de chiffres commençant par0
un littéral octal.Après
eval()
etMath.round()
, le résultat est contraint de nouveau dans une chaîne et chaque caractère numériquei
est remplacé par le caractère correspondant de la lignea
à l'indexi
.Cas de test
Démo
Démo
Démo
Démo
la source
Perl 5
-p
, 63 octetsEssayez-le en ligne!
Prend l'expression sur la première ligne d'entrée et la liste de traduction sur la seconde.
la source
Perl 5 , 130 octets
Essayez-le en ligne!
Peut-être que ce double eval peut être transformé en quelque sorte
s/.../.../geer
.la source
Fusain , 14 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Remarque: l'expression est évaluée selon la sémantique de Python 3, par exemple, les zéros non significatifs sur les nombres non nuls sont illégaux. Explication:
la source
0
s principaux ne fonctionnent pas en Python, qui est présent dans les cas de test.Python 3 , 137 octets
Une approche non regex utilisant
str.translate
etstr.maketrans
pour remplacer les caractères. J'ai perdu beaucoup de personnages en rognant les zéros de tête ...Essayez-le en ligne!
la source
Python 3 , 167 octets
Essayez-le en ligne!
Marge d'amélioration...
la source
Wolfram Language (Mathematica) , 121 octets
Je définis une fonction pure avec deux arguments. Étant donné que certaines fonctions sont répétées, je les enregistre dans une variable pour enregistrer quelques caractères. Ce code effectue simplement des remplacements de chaîne et utilise ensuite
ToExpression
pour évaluer l'expression avec le noyau Wolfram.Essayez-le en ligne!
la source
Lua ,
162151150 octetsload
au lieu defunction(...) end
Essayez-le en ligne!
Ce n'est pas la chose la plus courte du monde (Lua vous oblige à être assez dur, surtout par d'énormes mots-clés), mais c'était assez amusant à créer. Programme complet prenant en entrée les arguments et les résultats d'impression.
Explication
introduction
Attribuez des valeurs des arguments aux variables. Notre dictionnaire est
l
et l'expression estp
.L'expression suivante est assez difficile à comprendre car elle a un ordre d'exécution étrange, je vais donc l'expliquer étape par étape:
Conversion en nombres normaux
Effectuez le remplacement sur la chaîne d'expression: prenez chaque symbole et passez-le à la fonction (il
load
s'est avéré être court-circuité que la déclaration normale ici).La fonction recherche la position d'occurrence dans la chaîne de dictée pour le symbole passé à l'aide de
find
....
est le premier (et le seul) argument ici car nous sommes dans la fonction vaarg (n'importe quelload
ed est) qui est notre symbole actuel. Les arguments suivants sont nécessaires pour fairefind
ignorer les symboles spéciaux (1
c'est juste une valeur courte qui est évaluée commetrue
convertie en booléen): position de départ (une par défaut ici) etplain
, qui désactive en fait la gestion des modèles. Sans ces programmes, le troisième test échoue en raison de%
sa spécificité.Si une correspondance est trouvée, soustrayez-en une car les chaînes Lua (et les tableaux btw) sont basés sur 1. Si aucune correspondance n'est trouvée, elle ne retournera rien, ce qui n'entraînera aucun remplacement.
Résoudre
Prepend
return
à notre expression le résultat du résultat, calculez-le en compilant la fonction Lua et appelez-le, effectuez l'arrondi ( cela a fait l'inverse pour le raccourcir).Si nous obtenons une solution numérique à notre problème, il ne reste plus qu'à la reconvertir.
Rendre fou à nouveau
La première ligne est un moyen court de convertir un nombre en chaîne, nous pouvons donc maintenant appeler les méthodes de chaîne de manière courte. Faisons-le!
Maintenant
gsub
est appelé à nouveau pour tout replacer dans la folie. Ce temps%d
est utilisé à la place d'.
un modèle de remplacement car notre fonction peut et doit traiter uniquement les nombres (.
cela entraînerait une erreur sur les nombres négatifs). Cette fonction de temps (load
édité à nouveau pour enregistrer les octets) ajoute d'abord1
à son premier (et unique) argument, en le convertissant en position dans la chaîne de dictée, puis en renvoie le caractère à cette position.Hourra, presque là!
Fin dramatique, ou pourquoi les crochets comptent
Eh bien… pourquoi deux paires de supports de toute façon? Il est temps de parler de parall… eh, de multiples retours à Lua. Le fait est qu'une fonction peut renvoyer quelques valeurs d'un seul appel (regardez cette méta-question pour plus d'exemples).
Ici, le dernier
gsub
retourne deux valeurs: la chaîne de réponse dont nous avons besoin et le nombre de remplacements effectués (nombre de chiffres en fait, mais peu importe). S'il n'y avait pas de paire interne, la chaîne et le numéro seraient imprimés, ce qui nous ferait chier. Nous sacrifions donc ici deux octets pour omettre le deuxième résultat et finalement imprimer le produit de cette usine de folie.Eh bien, j'ai apprécié d'expliquer presque autant que le golf en premier lieu, j'espère que vous avez ce qui se passe ici.
la source