aboutsummaryrefslogtreecommitdiff
path: root/challenge-043
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-01-20 02:39:35 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-01-20 02:39:35 +0000
commit363ef1d3bead9ce7b656ccc77eace4f7c07cf2be (patch)
tree8e620e2ba13775da9f328eb1059f9e978d137817 /challenge-043
parent8514045dcf04c9d6112031068399c550a36f82d9 (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-043/arne-sommer/raku/ch-1.p624
-rwxr-xr-xchallenge-043/arne-sommer/raku/ch-2.p622
-rwxr-xr-xchallenge-043/arne-sommer/raku/olympic24
-rwxr-xr-xchallenge-043/arne-sommer/raku/selfdesc22
-rwxr-xr-xchallenge-043/arne-sommer/raku/selfdesc-verify21
-rwxr-xr-xchallenge-043/arne-sommer/raku/selfdesc-verify-bag21
-rwxr-xr-xchallenge-043/arne-sommer/raku/selfdesc-verify-hash21
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";