diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-02-16 21:57:13 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-16 21:57:13 +0000 |
| commit | b42a8a178dfd45f5511d8a9d8c3243f3b06e13bf (patch) | |
| tree | d685f532aaa6b22b8be40063c63f4f02ed2f687a /challenge-047 | |
| parent | 4746ec7f24ec3b0d966ba141fcd003c3d02e32f4 (diff) | |
| parent | f7c7a6c2600aeb492cbeb12891428da51f6df623 (diff) | |
| download | perlweeklychallenge-club-b42a8a178dfd45f5511d8a9d8c3243f3b06e13bf.tar.gz perlweeklychallenge-club-b42a8a178dfd45f5511d8a9d8c3243f3b06e13bf.tar.bz2 perlweeklychallenge-club-b42a8a178dfd45f5511d8a9d8c3243f3b06e13bf.zip | |
Merge pull request #1262 from andemark/branch-for-challenge-047
Updated with suggestions from Markus Holzer!
Diffstat (limited to 'challenge-047')
| -rw-r--r-- | challenge-047/mark-anderson/raku/ch-1.p6 | 84 |
1 files changed, 15 insertions, 69 deletions
diff --git a/challenge-047/mark-anderson/raku/ch-1.p6 b/challenge-047/mark-anderson/raku/ch-1.p6 index ac25fe2680..aef45ad5de 100644 --- a/challenge-047/mark-anderson/raku/ch-1.p6 +++ b/challenge-047/mark-anderson/raku/ch-1.p6 @@ -20,7 +20,7 @@ grammar Arabic2Roman { token TOP { :my $*Roman; - <Thousands>? <Hundreds>? <Tens>? <Ones> + <Thousands>? <Hundreds>? <Tens>? <Ones>? } token Thousands { <[123]> <?before \d ** 3> } @@ -42,45 +42,18 @@ class Roman2ArabicActions { } method Hundreds ($/) { - given $/ { - when "CM" { $*Arabic += 900 } - when "DCCC" { $*Arabic += 800 } - when "DCC" { $*Arabic += 700 } - when "DC" { $*Arabic += 600 } - when "D" { $*Arabic += 500 } - when "CD" { $*Arabic += 400 } - when "CCC" { $*Arabic += 300 } - when "CC" { $*Arabic += 200 } - when "C" { $*Arabic += 100 } - } + state %lookup = <C CC CCC CD D DC DCC DCCC CM> Z=> [1 .. 9]; + $*Arabic += %lookup{ $/ } * 100; } method Tens ($/) { - given ($/) { - when "XC" { $*Arabic += 90 } - when "LXXX" { $*Arabic += 80 } - when "LXX" { $*Arabic += 70 } - when "LX" { $*Arabic += 60 } - when "L" { $*Arabic += 50 } - when "XL" { $*Arabic += 40 } - when "XXX" { $*Arabic += 30 } - when "XX" { $*Arabic += 20 } - when "X" { $*Arabic += 10 } - } + state %lookup = <X XX XXX XL L LX LXX LXXX XC> Z=> [1 .. 9]; + $*Arabic += %lookup{ $/ } * 10; } method Ones ($/) { - given ($/) { - when "IX" { $*Arabic += 9 } - when "VIII" { $*Arabic += 8 } - when "VII" { $*Arabic += 7 } - when "VI" { $*Arabic += 6 } - when "V" { $*Arabic += 5 } - when "IV" { $*Arabic += 4 } - when "III" { $*Arabic += 3 } - when "II" { $*Arabic += 2 } - when "I" { $*Arabic += 1 } - } + state %lookup = <I II III IV V VI VII VIII IX> Z=> [1 .. 9]; + $*Arabic += %lookup{ $/ }; } } @@ -94,45 +67,18 @@ class Arabic2RomanActions { } method Hundreds ($/) { - given $/ { - when 9 { $*Roman ~= "CM" } - when 8 { $*Roman ~= "DCCC" } - when 7 { $*Roman ~= "DCC" } - when 6 { $*Roman ~= "DC" } - when 5 { $*Roman ~= "D" } - when 4 { $*Roman ~= "CD" } - when 3 { $*Roman ~= "CCC" } - when 2 { $*Roman ~= "CC" } - when 1 { $*Roman ~= "C" } - } + state @lookup = (q{}, <C CC CCC CD D DC DCC DCCC CM>).flat; + $*Roman ~= @lookup[ $/ ]; } method Tens ($/) { - given $/ { - when 9 { $*Roman ~= "XC" } - when 8 { $*Roman ~= "LXXX" } - when 7 { $*Roman ~= "LXX" } - when 6 { $*Roman ~= "LX" } - when 5 { $*Roman ~= "L" } - when 4 { $*Roman ~= "XL" } - when 3 { $*Roman ~= "XXX" } - when 2 { $*Roman ~= "XX" } - when 1 { $*Roman ~= "X" } - } + state @lookup = (q{}, <X XX XXX XL L LX LXX LXXX XC>).flat; + $*Roman ~= @lookup[ $/ ]; } method Ones ($/) { - given $/ { - when 9 { $*Roman ~= "IX" } - when 8 { $*Roman ~= "VIII" } - when 7 { $*Roman ~= "VII" } - when 6 { $*Roman ~= "VI" } - when 5 { $*Roman ~= "V" } - when 4 { $*Roman ~= "IV" } - when 3 { $*Roman ~= "III" } - when 2 { $*Roman ~= "II" } - when 1 { $*Roman ~= "I" } - } + state @lookup = (q{}, <I II III IV V VI VII VIII IX>).flat; + $*Roman ~= @lookup[ $/ ]; } } @@ -145,9 +91,9 @@ grammar Calculator { <Roman> <Operator> <Roman> } - token Roman { <[IVXLCDM]>+ } + token Roman { <[I V X L C D M]>+ } - token Operator { <[+x/-]> } + token Operator { <[+ x / -]> } } class CalculatorActions { |
