REFACTOR: extract logic and remove loop

This commit is contained in:
fiatcode 2026-02-10 08:39:34 +07:00
parent 5c9962eb61
commit c1a5ed7ed7
2 changed files with 17 additions and 17 deletions

View file

@ -1,17 +1,17 @@
String integerToRoman(int number) { String integerToRoman(int number) {
var result = ''; const romanSymbols = {5: 'V', 1: 'I'};
for (int i = 0; i < number; i++) {
if (number == 5) { if (_isSubtractiveCase(number)) {
result += 'V'; return romanSymbols[1]! + romanSymbols[5]!;
return result;
} }
if (number == 4) { if (_canRepeatSymbol(number)) {
result += 'IV'; return romanSymbols[1]! * number;
return result;
} }
result += 'I'; return romanSymbols[number] ?? '';
}
return result;
} }
bool _isSubtractiveCase(int number) => number == 4;
bool _canRepeatSymbol(int number) => number < 4;

View file

@ -14,11 +14,11 @@ void main() {
expect(roman_numerals.integerToRoman(3), 'III'); expect(roman_numerals.integerToRoman(3), 'III');
}); });
test('converts 5 to V', () {
expect(roman_numerals.integerToRoman(5), 'V');
});
test('converts 4 to IV', () { test('converts 4 to IV', () {
expect(roman_numerals.integerToRoman(4), 'IV'); expect(roman_numerals.integerToRoman(4), 'IV');
}); });
test('converts 5 to V', () {
expect(roman_numerals.integerToRoman(5), 'V');
});
} }