REFACTOR: apply DRY, remove magic numbers, add conversionRules domain

This commit is contained in:
fiatcode 2026-02-10 09:12:34 +07:00
parent 7eed3f8e2a
commit b12821147d

View file

@ -1,25 +1,15 @@
String integerToRoman(int number) { String integerToRoman(int number) {
const romanSymbols = { const conversionRules = [(10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')];
10: 'X',
9: 'IX',
8: 'VIII',
7: 'VII',
6: 'VI',
5: 'V',
1: 'I',
};
if (_isSubtractiveCase(number)) { final result = StringBuffer();
return romanSymbols[1]! + romanSymbols[5]!; var remaining = number;
for (final (value, symbol) in conversionRules) {
while (remaining >= value) {
result.write(symbol);
remaining -= value;
}
} }
if (_canRepeatSymbol(number)) { return result.toString();
return romanSymbols[1]! * number;
}
return romanSymbols[number] ?? '';
} }
bool _isSubtractiveCase(int number) => number == 4;
bool _canRepeatSymbol(int number) => number < 4;