Es ist das Jahr MDLXVII in einer Welt, in der das Römische Reich niemals unterging und der Zusammenbruch in die dunklen Zeiten niemals stattfand. Aufgrund der längeren Zeit von Pax Romana ermöglichte die wirtschaftliche Stabilität des Reiches einen raschen Fortschritt der Technologie.
Die Römer haben begonnen, sich mit Schaltkreisen zu beschäftigen, und einen ausgeklügelten Taschenrechner erfunden, für den kein "Gleich" -Knopf erforderlich ist. Sie nennen es "römisch-polnische Notation"
Um eine Berechnung durchzuführen, geben sie zuerst ihre Operanden und dann die Operation ein.
Zum Beispiel wäre 100 + 11 * 20 C XI XX * +
.
zusätzlich
Die Römer haben festgestellt, dass sie häufig mehrere Berechnungen gleichzeitig durchführen müssen, und würden es vorziehen, wenn die Methode jeden Wert "auf dem Stapel" in einer Art Array / Liste / Tupel-ähnlicher Struktur zurückgibt. (zB X I + X I - CC II +
würde zurückkehren [11, 9, 202])
Die Herausforderung besteht darin, ein Taschenrechnerprogramm zu entwickeln, mit dem diese Berechnungen durchgeführt werden können.
Klarstellung : Subtraktive Notation ist erforderlich. Ich hatte nicht bemerkt, dass es im antiken römischen Reich kein anerkanntes Merkmal war. Die Aufgabe war daher nicht eindeutig, und ich entschuldige mich.
Mindestrichtlinien
- Ihre Ausgabe erfolgt in arabischen Ziffern.
- Sie müssen nur von römischen Ziffern bis zu 5000 konvertieren.
- Sie müssen +, -, /, * Operationen unterstützen (Addition, Subtraktion, Division und Multiplikation).
- Ob die Division auf Gleitkomma oder Ganzzahl basiert, ist implementierungsspezifisch. Beides funktioniert für diese Herausforderung.
- Ihre Ausgabe muss Zahlen bis zu 4 Milliarden unterstützen.
- Die kürzeste Antwort insgesamt UND in jeder Sprache gewinnt. Dies ist eine Code Golf Challenge, aber ich liebe die Vielfalt.
Im Falle eines Unentschieden werden Faktoren wie die Unterstützung von römischen Ziffern über 5000 oder zusätzliche Operationen als die früheste Einreichung angesehen, die gewinnt.
Antworten:
Python 2 + Roman , 118 Bytes
Demo
Es kann nicht wegen des Moduls getestet online es Verwendung macht, aber man kann sehen , wie diese ausgeführt werden hier (ein volles Programm zu akzeptieren Eingabe von STDIN - einen Ausdruck mit Anführungszeichen - und das Drucken der Ausgabe an STDOUT - in Form einer Liste , der Stapel). Verwendet eine etwas ältere Version, da ich nicht die Mühe machen werde, ein neues GIF für nur wenige Bytes zu erstellen:
Um das Paket zu installieren, können Sie Folgendes in der Terminal- / Befehlszeile ausführen:
quelle
pyTester/Py.py
ಠ_ಠHaskell , 217 Bytes
-13 Bytes dank Bruce Forte. -73 Bytes dank Ørjan Johansen.
Probieren Sie es online aus!
Manuelle Implementierung, yay!
quelle
l=1:4:5:9:map(10*)l
.SOGL V0.12 , 57 Bytes
Probieren Sie es hier aus!
quelle
JavaScript (Knoten) + romans + stk-lang , 74 Bytes
Gibt eine Liste von Großzahlen zurück.
Ausführung
Führen Sie Folgendes aus:
Fügen Sie dann die Funktion ein. Beispiel:
quelle
$
und abgewichen>
. Ehrlich gesagt, ich mag es aberDyalog APL , 93 Bytes
Probieren Sie es online aus!
116 Bytes ohne den eingebauten Roman
quelle
var fn←arr
- es ist gleichbedeutend mitvar ← var fn arr
. Hier wird es an mehreren Stellen verwendet,a,←⍵
wobei es⍵
an die Variablea
Python 3 ,
280206 BytesProbieren Sie es online aus!
Diesmal mit subtraktiver Notationsunterstützung. Methode
c
ist der Haupteinstiegspunkt; Das andere ist Unterstützung.Protokoll bearbeiten:
quelle
if
und nichtelse
.n+=v-n%v*2
str
Verwendungszwecke auch kombinieren . Probieren Sie es online aus!JavaScipt (ES6),
152151 Byte1 Benutzer dank user202729 gespeichert
Testfälle
Code-Snippet anzeigen
Erklärung (weniger Golf)
quelle
1e3
auch funktioniert und ein paar Bytes spart.Gelee , 82 Bytes
Probieren Sie es online aus!
Ursprünglich im Chat gepostet .
Erläuterung:
Da Jelly keinen Stapel hat, lege ich den Stapel in das Register.
Wenn das Programm startet, der Registerwert
®
ist0
, der als behandelt wird[0]
für die Zwecke dieses Programms.quelle
Python 3 ,
216187 BytesProbieren Sie es online aus!
Weil es in den Kommentaren sowohl der Frage als auch dieser Antwort auftauchte und wahrscheinlich zu Abstimmungen führte: Diese Einreichung unterstützt keine subtraktive Notation. Begründung: Subtraktive Notation wurde im Römischen Reich selten verwendet und erst später populär gemacht (siehe Subtraktive Notation , Absatz 3, letzter Satz). Die Aufgabe setzt ein Römisches Reich voraus, das programmierbare integrierte Schaltkreise entwickelt hat, und nicht eines, das die gleichen kulturellen Veränderungen wie das Europa des 13. Jahrhunderts durchgemacht hat. In der Beschreibung wird die subtraktive Notation nicht erwähnt, und in keinem der Beispiele wird sie verwendet.
quelle
CIV
(104).