aboutsummaryrefslogtreecommitdiff
path: root/challenge-046
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-02-08 05:11:51 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-02-08 05:11:51 +0000
commit10a5d4e541e85c9a03a3af2f7bb9bced82826952 (patch)
tree43b60b18ec439e601b87154d5d1beb0ea4c71193 /challenge-046
parent4888342870a94bcc70bdb3b8e87f4ac1946098d2 (diff)
downloadperlweeklychallenge-club-10a5d4e541e85c9a03a3af2f7bb9bced82826952.tar.gz
perlweeklychallenge-club-10a5d4e541e85c9a03a3af2f7bb9bced82826952.tar.bz2
perlweeklychallenge-club-10a5d4e541e85c9a03a3af2f7bb9bced82826952.zip
- Added solutions by Arne Sommer.
Diffstat (limited to 'challenge-046')
-rw-r--r--challenge-046/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-046/arne-sommer/raku/ch-1.p623
-rwxr-xr-xchallenge-046/arne-sommer/raku/ch-2.p619
-rwxr-xr-xchallenge-046/arne-sommer/raku/cryptic49
-rwxr-xr-xchallenge-046/arne-sommer/raku/cryptic-simple23
-rwxr-xr-xchallenge-046/arne-sommer/raku/room50019
-rwxr-xr-xchallenge-046/arne-sommer/raku/room500-infseq5
-rwxr-xr-xchallenge-046/arne-sommer/raku/room500-loop22
-rwxr-xr-xchallenge-046/arne-sommer/raku/room500-seq5
9 files changed, 166 insertions, 0 deletions
diff --git a/challenge-046/arne-sommer/blog.txt b/challenge-046/arne-sommer/blog.txt
new file mode 100644
index 0000000000..92610f39d1
--- /dev/null
+++ b/challenge-046/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/cryptic-room.html
diff --git a/challenge-046/arne-sommer/raku/ch-1.p6 b/challenge-046/arne-sommer/raku/ch-1.p6
new file mode 100755
index 0000000000..076ad913ba
--- /dev/null
+++ b/challenge-046/arne-sommer/raku/ch-1.p6
@@ -0,0 +1,23 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($string is copy = 'Hxl4! ce-lo ze6lg HWlvR q9m#o', :$verbose, :$another);
+
+$string = 'P+2l!ato 1e80R$4u 5-r]+a>/ Pxwlb3k\ 2e35R8yu <!r^()k0' if $another;
+
+my @strings = $string.words;
+my $max = @strings>>.chars.max;
+
+say ": Max length: $max" if $verbose;
+
+my @result;
+
+for ^$max -> $index
+{
+ @result.push: @strings.map({ $_.substr($index,1) // "" }).repeated.unique;
+
+ say ": Pos $index : { @strings.map({ $_.substr($index,1) // "" }) }"
+ ~ " -> { @strings.map({ $_.substr($index,1) // "" }).repeated.unique }"
+ if $verbose;
+}
+
+say @result.join;
diff --git a/challenge-046/arne-sommer/raku/ch-2.p6 b/challenge-046/arne-sommer/raku/ch-2.p6
new file mode 100755
index 0000000000..d9f36d9cc7
--- /dev/null
+++ b/challenge-046/arne-sommer/raku/ch-2.p6
@@ -0,0 +1,19 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:$verbose);
+
+my @open;
+
+for 1 .. 500 -> $employee
+{
+ print "E: $employee | Rooms:" if $verbose;
+
+ for ($employee, $employee + $employee ... 500) -> $index
+ {
+ print " $index" if $verbose;
+ @open[$index] = ! @open[$index];
+ }
+ say "" if $verbose;
+}
+
+say "Open rooms: { (1..500).grep({@open[$_] }).join(',') }.";
diff --git a/challenge-046/arne-sommer/raku/cryptic b/challenge-046/arne-sommer/raku/cryptic
new file mode 100755
index 0000000000..37b7efb3fc
--- /dev/null
+++ b/challenge-046/arne-sommer/raku/cryptic
@@ -0,0 +1,49 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($string is copy = 'Hxl4! ce-lo ze6lg HWlvR q9m#o', :$verbose, :$another);
+
+$string = 'P+2l!ato 1e80R$4u 5-r]+a>/ Pxwlb3k\ 2e35R8yu <!r^()k0' if $another;
+
+my @strings = $string.words;
+my $max = @strings>>.chars.max;
+
+say ": Max length: $max" if $verbose;
+
+my @result;
+
+for ^$max -> $index
+{
+ @result.push: @strings.map({ $_.substr($index,1) // "" }).repeated.unique;
+
+ say ": Pos $index : { @strings.map({ $_.substr($index,1) // "" }) }"
+ ~ " -> { @strings.map({ $_.substr($index,1) // "" }).repeated.unique }"
+ if $verbose;
+}
+
+expand("", @result);
+
+sub expand ($current, @strings)
+{
+ say ":a: $current | @strings[]" if $verbose;
+
+ my $copy = $current;
+
+ for ^@strings.elems -> $index
+ {
+ my $curr = @strings[$index];
+ say ":b: $curr at $index" if $verbose;
+ if $curr.elems > 1
+ {
+ if $verbose { say ":c: $copy | $_" for @$curr }
+ expand($copy ~ $_, @strings[$index+1 .. Inf]) for @$curr;
+ return;
+ }
+ else
+ {
+ say ":d: $curr" if $verbose;
+ $copy ~= $curr;
+ }
+ }
+ say $copy;
+}
+
diff --git a/challenge-046/arne-sommer/raku/cryptic-simple b/challenge-046/arne-sommer/raku/cryptic-simple
new file mode 100755
index 0000000000..076ad913ba
--- /dev/null
+++ b/challenge-046/arne-sommer/raku/cryptic-simple
@@ -0,0 +1,23 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($string is copy = 'Hxl4! ce-lo ze6lg HWlvR q9m#o', :$verbose, :$another);
+
+$string = 'P+2l!ato 1e80R$4u 5-r]+a>/ Pxwlb3k\ 2e35R8yu <!r^()k0' if $another;
+
+my @strings = $string.words;
+my $max = @strings>>.chars.max;
+
+say ": Max length: $max" if $verbose;
+
+my @result;
+
+for ^$max -> $index
+{
+ @result.push: @strings.map({ $_.substr($index,1) // "" }).repeated.unique;
+
+ say ": Pos $index : { @strings.map({ $_.substr($index,1) // "" }) }"
+ ~ " -> { @strings.map({ $_.substr($index,1) // "" }).repeated.unique }"
+ if $verbose;
+}
+
+say @result.join;
diff --git a/challenge-046/arne-sommer/raku/room500 b/challenge-046/arne-sommer/raku/room500
new file mode 100755
index 0000000000..d9f36d9cc7
--- /dev/null
+++ b/challenge-046/arne-sommer/raku/room500
@@ -0,0 +1,19 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:$verbose);
+
+my @open;
+
+for 1 .. 500 -> $employee
+{
+ print "E: $employee | Rooms:" if $verbose;
+
+ for ($employee, $employee + $employee ... 500) -> $index
+ {
+ print " $index" if $verbose;
+ @open[$index] = ! @open[$index];
+ }
+ say "" if $verbose;
+}
+
+say "Open rooms: { (1..500).grep({@open[$_] }).join(',') }.";
diff --git a/challenge-046/arne-sommer/raku/room500-infseq b/challenge-046/arne-sommer/raku/room500-infseq
new file mode 100755
index 0000000000..e15083134c
--- /dev/null
+++ b/challenge-046/arne-sommer/raku/room500-infseq
@@ -0,0 +1,5 @@
+#! /usr/bin/env raku
+
+my $open := { ++$ ** 2 } ... *;
+
+say "Open Rooms: { $open[0 ..^ sqrt(500).Int].join(',') }.";
diff --git a/challenge-046/arne-sommer/raku/room500-loop b/challenge-046/arne-sommer/raku/room500-loop
new file mode 100755
index 0000000000..d6f6a1ce1d
--- /dev/null
+++ b/challenge-046/arne-sommer/raku/room500-loop
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:$verbose);
+
+my @open;
+
+for 1 .. 500 -> $employee
+{
+ print "E: $employee | Rooms:" if $verbose;
+
+ for ($employee, $employee + $employee ... 500) -> $index
+ {
+ print " $index" if $verbose;
+ @open[$index] = ! @open[$index];
+ }
+ say "" if $verbose;
+}
+
+for 1 .. 500 -> $room
+{
+ say "Room { $room.fmt('%3d')} is open" if @open[$room];
+}
diff --git a/challenge-046/arne-sommer/raku/room500-seq b/challenge-046/arne-sommer/raku/room500-seq
new file mode 100755
index 0000000000..52aa93b5f0
--- /dev/null
+++ b/challenge-046/arne-sommer/raku/room500-seq
@@ -0,0 +1,5 @@
+#! /usr/bin/env raku
+
+my $open := { ++$ ** 2 } ...^ *>= 500;
+
+say "Open Rooms: { $open.join(',') }.";