Курс по Raku / Приложение 🆕 / Всичко наедно / Смесени мини проекти / Exercises / Римски цифри
Решение: Римски цифри
Ето едно възможно решение на задачата.
Код
my @table =
1000 => 'M', 900 => 'CM', 500 => 'D', 400 => 'CD',
100 => 'C', 90 => 'XC', 50 => 'L', 40 => 'XL',
10 => 'X', 9 => 'IX', 5 => 'V', 4 => 'IV',
1 => 'I';
my $n = 1994;
my $roman = '';
for @table -> $pair {
while $n >= $pair.key {
$roman ~= $pair.value;
$n -= $pair.key;
}
}
say $roman;🦋 Намерете програмата във файла roman-numerals.raku.
Изход
MCMXCIVКоментари
Таблицата изброява всеки знак по низходяща стойност, включително изваждащите форми като
CM(900) иIV(4), така че на алгоритъма никога не му се налага да ги разглежда отделно.За всеки запис
whileдолепя знака и изважда стойността му толкова пъти, колкото се побира, така че най-големите парчета се изчерпват първи.