Tracks
/
Arturo
Arturo
/
Übungen
/
Römische Zahlen
Römische Zahlen

Römische Zahlen

Mittel

Einführung

Heute verwenden die meisten Menschen auf der Welt arabische Ziffern (0–9). Doch wenn du zweitausend Jahre zurückreisen würdest, würdest du feststellen, dass die meisten Europäer stattdessen römische Zahlen verwendeten.

Um eine römische Zahl zu schreiben, verwenden wir die folgenden lateinischen Buchstaben, von denen jeder einen Wert hat:

M D C L X V I
1000 500 100 50 10 5 1

Eine römische Zahl ist eine Folge dieser Buchstaben, und ihr Wert ist die Summe der Werte der Buchstaben. Zum Beispiel hat XVIII den Wert 18 (10 + 5 + 1 + 1 + 1 = 18).

Es gibt jedoch eine Regel, die alles etwas kniffliger macht: Derselbe Buchstabe darf nicht mehr als dreimal hintereinander verwendet werden. Das bedeutet, dass wir Zahlen wie 4 nicht mit dem scheinbar naheliegenden IIII ausdrücken können. Stattdessen verwenden wir für diese Zahlen eine Subtraktionsmethode zwischen zwei Buchstaben. Wir betrachten 4 also nicht als 1 + 1 + 1 + 1, sondern als 5 - 1. Und etwas verwirrend für unser modernes Denken schreiben wir die kleinere Zahl zuerst. Das gilt nur in den folgenden Fällen: 4 (IV), 9 (IX), 40 (XL), 90 (XC), 400 (CD) und 900 (CM).

Bei römischen Zahlen kommt es auf die Reihenfolge an! Die Buchstaben (und die obigen Sonderfälle) müssen von links nach rechts nach abnehmendem Wert geordnet sein.

Hier sind einige Beispiele:

 105 => CV
---- => --
 100 => C
+  5 =>  V
 106 => CVI
---- => --
 100 => C
+  5 =>  V
+  1 =>   I
 104 => CIV
---- => ---
 100 => C
+  4 =>  IV

Und zum Abschluss ein komplexeres Beispiel:

 1996 => MCMXCVI
----- => -------
 1000 => M
+ 900 =>  CM
+  90 =>    XC
+   5 =>      V
+   1 =>       I

Anleitung

Deine Aufgabe ist es, eine Zahl von arabischen in römische Ziffern umzuwandeln.

In dieser Übung beschäftigen wir uns nur mit den traditionellen römischen Ziffern, bei denen die größte Zahl MMMCMXCIX (oder 3.999) ist.

Note

Es gibt viele verschiedene Wege, zwischen arabischen und römischen Ziffern umzurechnen. Wir empfehlen, zuerst einen naiven Ansatz zu wählen, um dich mit dem Konzept der römischen Ziffern vertraut zu machen, und dann nach effizienteren Methoden zu suchen.

Schau dir unbedingt unser Deep-Dive-Video am Ende an, um die verschiedenen Ansätze zu erkunden, die du wählen kannst!

Anweisungen für Arturo

Für diese Übung musst du zwei verschiedene Arten unterstützen, das Wort stringify aufzurufen:

  1. Mit dem Attribut roman (z. B. stringify.roman 3999)
  2. Ohne das Attribut roman (z. B. stringify 3999)

Weitere Informationen findest du in der Dokumentation zu Attributen sowie in der Dokumentation zu attr.

Caution

Zusätzlich zu attr ist die Funktion attrs nützlich: Sie gibt alle Attribute des Funktionsaufrufs als Wörterbuch zurück.

Achtung, diese beiden Funktionen sind destruktiv!

Die Implementierung von Arturo verwendet eine „Attribute-Tabelle“.

Ein Beispiel:

showAttributes: function [x][
    print attr 'question
    print attrs
    print attrs
]

showAttributes .question:"6 * 9" .answer:42 'arg

gibt aus

6 * 9
[answer:42]
[]

Bei jedem Schritt sehen wir, wie das Attribut-Wörterbuch schrumpft.

Fazit: Beachte, dass du Attribute nur einmal abrufen kannst. Wenn du später noch einmal auf Attribute zugreifen musst, erfasse sie am Anfang deiner Funktionen.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Arturo Exercism

Bereit, mit Römische Zahlen zu starten?

Melde dich bei Exercism an, um Arturo mit 79 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.

Tauche tiefer in Römische Zahlen ein!

Entdecke eine Vielzahl verschiedener Lösungen für diese knifflige Übung: von Rekursion über tabellenbasierte Nachschlagetabellen und einer Lösung mit gemischten Stellenwertsystemen bis hin zu etwas simplem Schummeln mit Common Lisp.