diff options
| -rw-r--r-- | challenge-069/simon-proctor/raku/ch-1.raku | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/challenge-069/simon-proctor/raku/ch-1.raku b/challenge-069/simon-proctor/raku/ch-1.raku new file mode 100644 index 0000000000..634bca1135 --- /dev/null +++ b/challenge-069/simon-proctor/raku/ch-1.raku @@ -0,0 +1,31 @@ +#!/usr/bin/env raku + +#| Calculate the Strobogrammatic Numbers between $A and $B +sub MAIN ( + UInt $A, #= Start point + UInt $B where { $A <= $B <= 10**15 } , #= End point +) { + for (1..15) -> $length { + for strobogrammatic($length) -> $s { + next if $s < $A; + exit if $s > $B; + say $s; + } + } +} + +multi sub rev( 6 ) { 9 } +multi sub rev( 8 ) { 8 } +multi sub rev( 9 ) { 6 } + +multi sub strobogrammatic( 1 ) { ("8",) } + +multi sub strobogrammatic( $length where { 1 < $length <= 3 } ) { + my @base = [(6,),(8,),(9,)]; + @base.map( -> @start { |@start, |( $length %% 2 ?? () !! (8,) ), |@start.reverse.map( { rev($_) } ) } ).map( *.join("") ); +} + +multi sub strobogrammatic( $length ) { + my @base = [X] ((6,8,9) xx ($length div 2)); + @base.map( -> @start { |@start, |( $length %% 2 ?? () !! (8,) ), |@start.reverse.map( { rev($_) } ) } ).map( *.join("") ); +} |
