diff --git a/lib/roman_numerals.dart b/lib/roman_numerals.dart index a962a11..8bd07b5 100644 --- a/lib/roman_numerals.dart +++ b/lib/roman_numerals.dart @@ -1,17 +1,17 @@ String integerToRoman(int number) { - var result = ''; - for (int i = 0; i < number; i++) { - if (number == 5) { - result += 'V'; - return result; - } + const romanSymbols = {5: 'V', 1: 'I'}; - if (number == 4) { - result += 'IV'; - return result; - } - - result += 'I'; + if (_isSubtractiveCase(number)) { + return romanSymbols[1]! + romanSymbols[5]!; } - return result; + + if (_canRepeatSymbol(number)) { + return romanSymbols[1]! * number; + } + + return romanSymbols[number] ?? ''; } + +bool _isSubtractiveCase(int number) => number == 4; + +bool _canRepeatSymbol(int number) => number < 4; diff --git a/test/roman_numerals_test.dart b/test/roman_numerals_test.dart index 324c4ea..bc1732f 100644 --- a/test/roman_numerals_test.dart +++ b/test/roman_numerals_test.dart @@ -14,11 +14,11 @@ void main() { expect(roman_numerals.integerToRoman(3), 'III'); }); - test('converts 5 to V', () { - expect(roman_numerals.integerToRoman(5), 'V'); - }); - test('converts 4 to IV', () { expect(roman_numerals.integerToRoman(4), 'IV'); }); + + test('converts 5 to V', () { + expect(roman_numerals.integerToRoman(5), 'V'); + }); }