Römische Zahlen (2)
Allgemein C# Scala Code Kata
Wie Römische Zahlen (1) hier angedeutet, versuch(t)e ich den Code der letzten Implementierung ein wenig lesbarer zu machen.
Kategorie Wie Römische Zahlen (1) hier angedeutet, versuch(t)e ich den Code der letzten Implementierung ein wenig lesbarer zu machen.
Hoffe es ist gelungen ->
public static char[] letters = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
public static string ToRoman(int arabic) {
return ToRomanSubstraction(ToRomanSimple(arabic));
}
public static string ToRomanSimple(int arabic) {
if (arabic < 1) return string.Empty;
if (arabic > 3999) return "N";
string roman = string.Empty;
int N = arabic;
for (int i = 0; i < letters.Length; i++) {
int n = (int)Math.Pow(10, (letters.Length - 1 - i) / 2) * ((i % 2 == 1) ? 5 : 1);
while (N >= n) {
roman += letters[i];
N -= n;
}
}
return roman;
}
public static string ToRomanSubstraction( string roman ) {
for(int i = 1; i < letters.Length-1; i++ ) {
string search2 = new String(letters[i+1],4);
string search1 = letters[i] + search2;
roman = roman.Replace(search1,string.Empty+letters[i+1]+letters[i-1]);//replace the nine
roman = roman.Replace(search2,string.Empty+letters[i+1]+letters[i]);// replace the four
}
return roman;
}
Die Idee dahinter war eigentlich ganz einfach In der ersten Implementierung habe ich versucht die gesamte Logik (konvertiere in Römische Zahl und verwende die Subtraktionsregel) in einer Funktion zu implementieren. Nachdem mir bewußt wurde, dass es eigentlich zwei Schritte sind. Voila lesbarer einfacher Code!
Gruß JJR
P.S.: Als nächstes ist dann Scala dran......
public static char[] letters = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
public static string ToRoman(int arabic) {
return ToRomanSubstraction(ToRomanSimple(arabic));
}
public static string ToRomanSimple(int arabic) {
if (arabic < 1) return string.Empty;
if (arabic > 3999) return "N";
string roman = string.Empty;
int N = arabic;
for (int i = 0; i < letters.Length; i++) {
int n = (int)Math.Pow(10, (letters.Length - 1 - i) / 2) * ((i % 2 == 1) ? 5 : 1);
while (N >= n) {
roman += letters[i];
N -= n;
}
}
return roman;
}
public static string ToRomanSubstraction( string roman ) {
for(int i = 1; i < letters.Length-1; i++ ) {
string search2 = new String(letters[i+1],4);
string search1 = letters[i] + search2;
roman = roman.Replace(search1,string.Empty+letters[i+1]+letters[i-1]);//replace the nine
roman = roman.Replace(search2,string.Empty+letters[i+1]+letters[i]);// replace the four
}
return roman;
}
Die Idee dahinter war eigentlich ganz einfach In der ersten Implementierung habe ich versucht die gesamte Logik (konvertiere in Römische Zahl und verwende die Subtraktionsregel) in einer Funktion zu implementieren. Nachdem mir bewußt wurde, dass es eigentlich zwei Schritte sind. Voila lesbarer einfacher Code!
Gruß JJR
P.S.: Als nächstes ist dann Scala dran......