final romanNumbers = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000
};
void main()
{
var stopwatch = Stopwatch()..start();
final int loopCount = 1000000;
for(var i = 0; i < loopCount; i++) {
romanToIntShamkhal('MCMXCIV');
}
print('Shamkhal\'s Code Executed in ${stopwatch.elapsed}');
stopwatch = Stopwatch()..start();
for(var i = 0; i < loopCount; i++) {
romanToIntKanan('MCMXCIV');
}
print('Kanan\'s Code Executed in ${stopwatch.elapsed}');
}
int romanToIntShamkhal(String roman)
{
return roman.split('')
.reversed
.map((n) => romanNumbers[n])
.reduce((curr, next) => curr > 2 * next ? curr - next : curr + next);
}
int romanToIntKanan(String romanNumber) {
int calculatedResult = 0;
for (int i = 0; i < romanNumber.length; i++) {
var currentCharacter =
new String.fromCharCode(romanNumber.runes.elementAt(i));
var nextCharacter;
if (i < romanNumber.length - 1) {
nextCharacter =
new String.fromCharCode(romanNumber.runes.elementAt(i + 1));
}
if (nextCharacter != null) {
calculatedResult += romanNumbers[currentCharacter] *
(romanNumbers[currentCharacter] >= romanNumbers[nextCharacter]
? 1
: -1);
continue;
}
calculatedResult += romanNumbers[currentCharacter];
}
return calculatedResult;
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎