C'est l'année MDLXVII dans un monde où l'empire romain n'est jamais tombé et l'effondrement dans les âges sombres ne s'est jamais produit. En raison de la période prolongée de Pax Romana, la stabilité économique de l'empire a permis à la technologie de progresser à un rythme rapide.
Les Romains ont commencé à barboter avec les circuits et ont inventé une calculatrice ingénieuse qui ne nécessite pas l'utilisation d'un bouton "égal". Ils l'appellent "la notation polonaise romaine"
Pour effectuer un calcul, ils entrent d'abord leurs opérandes, puis l'opération.
Par exemple, 100 + 11 * 20 serait C XI XX * +
.
aditionellement
Les Romains ont constaté qu'ils ont souvent besoin de faire plusieurs calculs en même temps, et préféreraient que la méthode retourne chaque valeur "sur la pile" dans une sorte de structure de type tableau / liste / tuple. (par exemple X I + X I - CC II +
reviendrait [11, 9, 202])
Le défi est de développer un programme de calculateur capable de faire ces calculs.
Clarification : la notation soustractive est requise. Je n'avais pas réalisé que ce n'était pas une caractéristique reconnue dans l'ancien empire romain. La tâche était donc ambiguë et je m'en excuse.
Lignes directrices minimales
- Votre sortie sera en chiffres arabes.
- Vous avez seulement besoin de convertir des chiffres romains jusqu'à 5000.
- Vous devrez prendre en charge les opérations +, -, /, * (addition, soustraction, division et multiplication).
- Que la division soit basée sur une virgule flottante ou sur un entier est spécifique à l'implémentation. Soit fonctionne pour ce défi.
- Votre sortie devra prendre en charge des nombres jusqu'à 4 milliards.
- Réponse la plus courte dans l'ensemble, ET dans chaque langue gagne. Il s'agit d'un Code Golf Challenge mais j'adore la variété.
En cas d'égalité, des facteurs tels que la prise en charge des chiffres romains au-dessus de 5000 ou des opérations supplémentaires seront considérés comme la première soumission sera gagnante.
Réponses:
Python 2 + romain , 118 octets
Démo
Il ne peut pas être testé en ligne en raison du module qu'il utilise, mais vous pouvez voir comment l'exécuter ici (un programme complet acceptant les entrées de STDIN - une expression avec des guillemets - et imprimant la sortie vers STDOUT - sous la forme d'une liste , la pile). Utilise une version légèrement plus ancienne, car je ne prendrai pas la peine de créer un nouveau GIF pour seulement quelques octets:
Pour installer le package, vous pouvez exécuter ce qui suit dans le terminal / ligne de commande:
la source
pyTester/Py.py
ಠ_ಠHaskell , 217 octets
-13 octets grâce à Bruce Forte. -73 octets grâce à Ørjan Johansen.
Essayez-le en ligne!
Implémentation manuelle, yay!
la source
l=1:4:5:9:map(10*)l
.SOGL V0.12 , 57 octets
Essayez-le ici!
la source
JavaScript (Node) + romans + stk-lang , 74 octets
Renvoie une liste de bigintegers.
Exécution
Exécutez ce qui suit:
Collez ensuite la fonction. Exemple:
la source
$
et>
. Honnêtement, je l'aime bienDyalog APL , 93 octets
Essayez-le en ligne!
116 octets sans le romain intégré
la source
var fn←arr
- c'est équivalent àvar ← var fn arr
. Ici, il est utilisé à plusieurs endroits,a,←⍵
celui qui s'ajoute⍵
à la variablea
Python 3 ,
280206 octetsEssayez-le en ligne!
Cette fois avec le support de notation soustractive. La méthode
c
est le principal point d'entrée; l'autre est le soutien.Modifier le journal:
la source
if
etelse
.n+=v-n%v*2
str
utilisations. Essayez-le en ligne!JavaScipt (ES6),
152151 octets1 octet enregistré grâce à user202729
Cas de test
Afficher l'extrait de code
Explication (moins golfé)
la source
1e3
fonctionne également et enregistre quelques octets.Gelée , 82 octets
Essayez-le en ligne!
Publié à l'origine dans le chat .
Explication:
Parce que Jelly n'a pas de pile, j'ai mis la pile dans le registre.
Lorsque le programme démarre, la valeur de registre
®
est0
, qui est traitée comme[0]
aux fins de ce programme.la source
Python 3 ,
216187 octetsEssayez-le en ligne!
Parce qu'elle est apparue dans les commentaires de la question et de cette réponse et a probablement conduit à des votes négatifs: cette soumission ne prend pas en charge la notation soustractive. Justification: La notation soustractive était rarement utilisée dans l'Empire romain et n'a été popularisée que plus tard (voir Notation soustractive , paragraphe 3, dernière phrase). La tâche suppose un empire romain qui a développé des circuits intégrés programmables, pas un qui a subi les mêmes changements culturels que l'Europe du 13ème siècle. La description ne mentionne pas la notation soustractive et aucun des exemples ne l'utilise.
la source
CIV
(104).