REFACTOR: extract logic and remove loop
This commit is contained in:
parent
5c9962eb61
commit
c1a5ed7ed7
2 changed files with 17 additions and 17 deletions
|
|
@ -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) {
|
|
||||||
result += 'V';
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (number == 4) {
|
if (_isSubtractiveCase(number)) {
|
||||||
result += 'IV';
|
return romanSymbols[1]! + romanSymbols[5]!;
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
result += 'I';
|
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
|
if (_canRepeatSymbol(number)) {
|
||||||
|
return romanSymbols[1]! * number;
|
||||||
|
}
|
||||||
|
|
||||||
|
return romanSymbols[number] ?? '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool _isSubtractiveCase(int number) => number == 4;
|
||||||
|
|
||||||
|
bool _canRepeatSymbol(int number) => number < 4;
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue