InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Betrachten wir eine einfache Möglichkeit, das Problem der Umwandlung einer römischen Zahl in eine Dezimalzahl (Ruby) zu lösen.
Aufgabe
Erstellen Sie eine Funktion solution, die einen String — eine römische Zahl — akzeptiert und ihren Wert als dezahlen Ganzzahl zurückgibt.
Eine Validierung der Richtigkeit der römischen Schreibweise ist nicht erforderlich.
Beispiele:
- "MCMXC" → 1990
- "MMVIII" → 2008
- "MDCLXVI" → 1666
Wie funktioniert die Umwandlung von römischen Zahlen in Dezimalzahlen?
Römische Zahlen sind ein Zahlensystem, das auf Symbolen basiert, von denen jedes einem bestimmten Wert entspricht: I — 1, V — 5, X — 10, L — 50, C — 100, D — 500, M — 1000. Um eine Zahl zu schreiben, werden die Symbole nach bestimmten Regeln kombiniert. Wenn ein Symbol mit einem geringeren Wert vor einem größeren steht (zum Beispiel IV), bedeutet das Subtraktion (5 - 1 = 4). Stehen sie jedoch in umgekehrter Reihenfolge — werden sie addiert (VI = 5 + 1 = 6). Dank dieser Logik können sowohl einfache als auch komplexe Zahlen kompakt geschrieben werden, wie MCMXC für 1990.
Bei der Umwandlung von römischen Zahlen in Dezimalzahlen durchläuft der Computeralgorithmus die Zeichen des Strings von rechts nach links. Dies ermöglicht es, leicht zu bestimmen, ob der Wert des Symbols addiert oder subtrahiert werden muss. Zum Beispiel beginnt die Verarbeitung in XIV mit V = 5, dann I = 1 (weniger als V, daher subtrahieren: 5 - 1 = 4), dann X = 10 (mehr als I, daher addieren: 10 + 4 = 14). Dieser Ansatz ermöglicht eine effiziente Implementierung der Umwandlung selbst in wenigen Codezeilen.
Test (rspec) zur Überprüfung der Methode
RSpec.describe '#solution' do
it 'wandelt einfache römische Zahlen um' do
expect(solution('I')).to eq(1)
expect(solution('III')).to eq(3)
expect(solution('VIII')).to eq(8)
end
it 'wandelt zusammengesetzte römische Zahlen um' do
expect(solution('IV')).to eq(4)
expect(solution('IX')).to eq(9)
expect(solution('XL')).to eq(40)
expect(solution('XC')).to eq(90)
end
it 'wandelt große römische Zahlen um' do
expect(solution('MCMXC')).to eq(1990)
expect(solution('MMVIII')).to eq(2008)
expect(solution('MDCLXVI')).to eq(1666)
expect(solution('MMMCMXCIX')).to eq(3999)
end
end
Methode solution
Eine der Möglichkeiten zur Lösung (mit Ruby können die gleichen Dinge auf viele Arten gemacht werden).
def solution(roman)
values = {
'M' => 1000,
'D' => 500,
'C' => 100,
'L' => 50,
'X' => 10,
'V' => 5,
'I' => 1
}
total = 0
prev = 0
roman.chars.reverse.each do |char|
current = values[char]
if current < prev
total -= current
else
total += current
prev = current
end
end
total
end
Funktionsweise des Algorithmus
Wir bewegen uns vom Ende des Strings und addieren die Werte der Symbole. Wenn die aktuelle Zahl kleiner als die vorherige ist — subtrahieren wir sie, andernfalls — addieren wir sie. Dies ermöglicht eine korrekte Verarbeitung von Fällen wie IV oder CM.
Dieser Beitrag hat noch keine Ergänzungen vom Autor.