From f7c7a6c2600aeb492cbeb12891428da51f6df623 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Sun, 16 Feb 2020 14:36:16 -0700 Subject: Updated with suggestions from Markus Holzer! --- challenge-047/mark-anderson/raku/ch-1.p6 | 84 ++++++-------------------------- 1 file 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; - ? ? ? + ? ? ? ? } token Thousands { <[123]> } @@ -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 = 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 = 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 = 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{}, ).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{}, ).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{}, ).flat; + $*Roman ~= @lookup[ $/ ]; } } @@ -145,9 +91,9 @@ grammar Calculator { } - token Roman { <[IVXLCDM]>+ } + token Roman { <[I V X L C D M]>+ } - token Operator { <[+x/-]> } + token Operator { <[+ x / -]> } } class CalculatorActions { -- cgit