diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-01-20 02:39:35 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-01-20 02:39:35 +0000 |
| commit | 363ef1d3bead9ce7b656ccc77eace4f7c07cf2be (patch) | |
| tree | 8e620e2ba13775da9f328eb1059f9e978d137817 /challenge-043 | |
| parent | 8514045dcf04c9d6112031068399c550a36f82d9 (diff) | |
| download | perlweeklychallenge-club-363ef1d3bead9ce7b656ccc77eace4f7c07cf2be.tar.gz perlweeklychallenge-club-363ef1d3bead9ce7b656ccc77eace4f7c07cf2be.tar.bz2 perlweeklychallenge-club-363ef1d3bead9ce7b656ccc77eace4f7c07cf2be.zip | |
- Added solutions by Arne Sommer.
Diffstat (limited to 'challenge-043')
| -rw-r--r-- | challenge-043/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-043/arne-sommer/raku/ch-1.p6 | 24 | ||||
| -rwxr-xr-x | challenge-043/arne-sommer/raku/ch-2.p6 | 22 | ||||
| -rwxr-xr-x | challenge-043/arne-sommer/raku/olympic | 24 | ||||
| -rwxr-xr-x | challenge-043/arne-sommer/raku/selfdesc | 22 | ||||
| -rwxr-xr-x | challenge-043/arne-sommer/raku/selfdesc-verify | 21 | ||||
| -rwxr-xr-x | challenge-043/arne-sommer/raku/selfdesc-verify-bag | 21 | ||||
| -rwxr-xr-x | challenge-043/arne-sommer/raku/selfdesc-verify-hash | 21 |
8 files changed, 156 insertions, 0 deletions
diff --git a/challenge-043/arne-sommer/blog.txt b/challenge-043/arne-sommer/blog.txt new file mode 100644 index 0000000000..3f15bd7612 --- /dev/null +++ b/challenge-043/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/olympic-numbers.html diff --git a/challenge-043/arne-sommer/raku/ch-1.p6 b/challenge-043/arne-sommer/raku/ch-1.p6 new file mode 100755 index 0000000000..47525698ff --- /dev/null +++ b/challenge-043/arne-sommer/raku/ch-1.p6 @@ -0,0 +1,24 @@ +#! /usr/bin/env raku + +my @curr = (8, 0, 7, 0, 0, 0, 5, 0, 9); + +for (1,2,3,4,6).permutations -> @permutation +{ + @curr[1,3,4,5,7] = @permutation; + + if @curr[0] + @curr[1] == # Blue + @curr[1] + @curr[2] + @curr[3] == # Yellow + @curr[3] + @curr[4] + @curr[5] == # Black + @curr[5] + @curr[6] + @curr[7] == # Green + @curr[7] + @curr[8] == 11 # Red + { + say "Values: @curr[] (from left to right)"; + say "Blue: @curr[0] + @curr[1]"; + say "Yellow: @curr[1] + @curr[2] + @curr[3]"; + say "Black: @curr[3] + @curr[4] + @curr[5]"; + say "Green: @curr[5] + @curr[6] + @curr[7]"; + say "Red: @curr[7] + @curr[8]"; + + last; + } +} diff --git a/challenge-043/arne-sommer/raku/ch-2.p6 b/challenge-043/arne-sommer/raku/ch-2.p6 new file mode 100755 index 0000000000..701788dee0 --- /dev/null +++ b/challenge-043/arne-sommer/raku/ch-2.p6 @@ -0,0 +1,22 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt :$base = 10); + +if $base == any(0,1,2,3,6) || $base > 39 +{ + say "Error"; +} +# elsif $base == 4 +# { +# say "1210"; +# } +elsif $base == 5 +{ + say "21200"; # Prevent "11100" +} +else +{ + my $number = "{ ($base -4).base(36) }21" ~ "0" x ($base - 3); + $number.substr-rw(*-4,1) = 1; + say $number; +} diff --git a/challenge-043/arne-sommer/raku/olympic b/challenge-043/arne-sommer/raku/olympic new file mode 100755 index 0000000000..47525698ff --- /dev/null +++ b/challenge-043/arne-sommer/raku/olympic @@ -0,0 +1,24 @@ +#! /usr/bin/env raku + +my @curr = (8, 0, 7, 0, 0, 0, 5, 0, 9); + +for (1,2,3,4,6).permutations -> @permutation +{ + @curr[1,3,4,5,7] = @permutation; + + if @curr[0] + @curr[1] == # Blue + @curr[1] + @curr[2] + @curr[3] == # Yellow + @curr[3] + @curr[4] + @curr[5] == # Black + @curr[5] + @curr[6] + @curr[7] == # Green + @curr[7] + @curr[8] == 11 # Red + { + say "Values: @curr[] (from left to right)"; + say "Blue: @curr[0] + @curr[1]"; + say "Yellow: @curr[1] + @curr[2] + @curr[3]"; + say "Black: @curr[3] + @curr[4] + @curr[5]"; + say "Green: @curr[5] + @curr[6] + @curr[7]"; + say "Red: @curr[7] + @curr[8]"; + + last; + } +} diff --git a/challenge-043/arne-sommer/raku/selfdesc b/challenge-043/arne-sommer/raku/selfdesc new file mode 100755 index 0000000000..701788dee0 --- /dev/null +++ b/challenge-043/arne-sommer/raku/selfdesc @@ -0,0 +1,22 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt :$base = 10); + +if $base == any(0,1,2,3,6) || $base > 39 +{ + say "Error"; +} +# elsif $base == 4 +# { +# say "1210"; +# } +elsif $base == 5 +{ + say "21200"; # Prevent "11100" +} +else +{ + my $number = "{ ($base -4).base(36) }21" ~ "0" x ($base - 3); + $number.substr-rw(*-4,1) = 1; + say $number; +} diff --git a/challenge-043/arne-sommer/raku/selfdesc-verify b/challenge-043/arne-sommer/raku/selfdesc-verify new file mode 100755 index 0000000000..5ae6d074cd --- /dev/null +++ b/challenge-043/arne-sommer/raku/selfdesc-verify @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $val, :$verbose); + +my @digits = $val.comb>>.parse-base(36); +my $base = $val.chars; +my $coll = @digits.Bag; +my $sum = @digits.sum; + +if $sum != $base +{ + say "NOT OK"; exit; +} + +for ^$base +{ + say "- $_: { $coll{$_} } (count) == @digits[$_] (pos) - { $coll{$_} == @digits[$_] }" if $verbose; + if $coll{$_} != @digits[$_] { say "NOT OK"; exit; } +} + +say "OK"; diff --git a/challenge-043/arne-sommer/raku/selfdesc-verify-bag b/challenge-043/arne-sommer/raku/selfdesc-verify-bag new file mode 100755 index 0000000000..d996df867a --- /dev/null +++ b/challenge-043/arne-sommer/raku/selfdesc-verify-bag @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $val, :$verbose); + +my @digits = $val.comb>>.Int; +my $base = $val.chars; +my $coll = @digits.Bag; +my $sum = @digits.sum; + +if $sum != $base +{ + say "NOT OK"; exit; +} + +for ^$base +{ + say "- $_: { $coll{$_} } (count) == @digits[$_] (pos) - { $coll{$_} == @digits[$_] }" if $verbose; + if $coll{$_} != @digits[$_] { say "NOT OK"; exit; } +} + +say "OK"; diff --git a/challenge-043/arne-sommer/raku/selfdesc-verify-hash b/challenge-043/arne-sommer/raku/selfdesc-verify-hash new file mode 100755 index 0000000000..13084d3cd8 --- /dev/null +++ b/challenge-043/arne-sommer/raku/selfdesc-verify-hash @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $val, :$verbose); + +my @digits = $val.comb; +my $base = $val.chars; +my %coll = @digits.Bag; +my $sum = @digits.sum; + +if $sum != $base +{ + say "NOT OK"; exit; +} + +for ^$base +{ + say "- $_: { %coll{$_} // 0 } (count) == @digits[$_] (pos) - { (%coll{$_} // 0) == @digits[$_] }" if $verbose; + if ( %coll{$_} // 0) != @digits[$_] { say "NOT OK"; exit; } +} + +say "OK"; |
