aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-05-13 08:23:54 +0100
committerGitHub <noreply@github.com>2020-05-13 08:23:54 +0100
commite9836f435b61b0b43738fa4efe266cf9a88642e3 (patch)
treea4d971b4396c95c6e2da9bc2bb9dcabcbf6257be
parent2f513b7c4a39927bfac6869cd8a9ada414321ebe (diff)
parent2b986cffac8bb3613808c159daf9a248c6adc362 (diff)
downloadperlweeklychallenge-club-e9836f435b61b0b43738fa4efe266cf9a88642e3.tar.gz
perlweeklychallenge-club-e9836f435b61b0b43738fa4efe266cf9a88642e3.tar.bz2
perlweeklychallenge-club-e9836f435b61b0b43738fa4efe266cf9a88642e3.zip
Merge pull request #1711 from holli-holzer/master
improved, final
-rw-r--r--challenge-060/markus-holzer/raku/ch-1.raku42
-rw-r--r--challenge-060/markus-holzer/raku/ch-2.raku4
2 files changed, 32 insertions, 14 deletions
diff --git a/challenge-060/markus-holzer/raku/ch-1.raku b/challenge-060/markus-holzer/raku/ch-1.raku
index 9211ab9b99..8019730554 100644
--- a/challenge-060/markus-holzer/raku/ch-1.raku
+++ b/challenge-060/markus-holzer/raku/ch-1.raku
@@ -1,21 +1,39 @@
use Test;
-sub excel-column( Int $n )
-{
- state @digits = |('A'..'Z');
+subset ExcelColumn of Str where * ~~ / ^ <[ A .. Z ]>+ $ /;
+subset PositiveInt of Int where * > 0;
+
+multi sub MAIN( ExcelColumn $c ) { say from-excel( $c ) }
+multi sub MAIN( PositiveInt $n ) { say to-excel( $n ) }
+multi sub MAIN( Bool:D :$t ) { run-tests; }
- multi ec( Int $i where * < 26 ) {
- @digits[ $i ] }
+sub to-excel( PositiveInt $n )
+{
+ multi ec( Int $i where * < 26 ) {
+ ( $i + 65 ).chr }
multi ec( Int $i ) {
ec( $i div 26 - 1 ) ~ ec( $i % 26 ) }
- ec( $n - 1 );
+ ec $n - 1;
}
-ok excel-column( 1 ) eq 'A', 'A';
-ok excel-column( 26 ) eq 'Z', 'Z';
-ok excel-column( 27 ) eq 'AA', 'AA';
-ok excel-column( 28 ) eq 'AB', 'AB';
-ok excel-column( 26**3 + 26**2 + 26) eq 'ZZZ', 'ZZZ';
-ok excel-column( 26**3 + 26**2 + 1) eq 'ZZA', 'ZZA'; \ No newline at end of file
+sub from-excel( ExcelColumn $column )
+{
+ [+] $column.comb.map( *.ord - 64 ).reverse.kv.map: -> $i, $v {
+ 26 ** $i * $v
+ }
+}
+
+sub run-tests( $n = 26**3 + 26**2 + 26 )
+{
+ for ( 'A', 'B' ... * ).kv -> $i, $v
+ {
+ last if $i == $n;
+ ok to-excel( $i + 1 ) eq $v, "to-excel({ $i + 1 })";
+ ok from-excel( $v ) eq $i + 1, "from-excel({ $v })";
+ }
+
+ dies-ok { from-excel( "AÜA" ) }, "bad input: Ü";
+ dies-ok { to-excel( 0 ) }, "bad input: 0";
+}
diff --git a/challenge-060/markus-holzer/raku/ch-2.raku b/challenge-060/markus-holzer/raku/ch-2.raku
index b5a5ece78f..d71a554a95 100644
--- a/challenge-060/markus-holzer/raku/ch-2.raku
+++ b/challenge-060/markus-holzer/raku/ch-2.raku
@@ -2,11 +2,11 @@ my @L = (0, 1, 2, 5);
my $X = 2;
my $Y = 21;
-.say for ( |@L xx 2 )
+.say for ( |@L xx $X )
.combinations( $X )
.map( *.join.Int )
- .unique
.grep( * < $Y )
.grep( *.chars == $X )
+ .unique
.sort
; \ No newline at end of file