aboutsummaryrefslogtreecommitdiff
path: root/challenge-046
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-02-09 19:04:58 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-02-09 19:04:58 +0000
commit52ac0b8e5b97473b74872273c1d8b13ff05effcd (patch)
tree35303c1354e59258f4035902b324ec298ce5c974 /challenge-046
parenta0b172cb3fdd9b7c30e09551fc3b8bd665df3879 (diff)
downloadperlweeklychallenge-club-52ac0b8e5b97473b74872273c1d8b13ff05effcd.tar.gz
perlweeklychallenge-club-52ac0b8e5b97473b74872273c1d8b13ff05effcd.tar.bz2
perlweeklychallenge-club-52ac0b8e5b97473b74872273c1d8b13ff05effcd.zip
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-046')
-rw-r--r--challenge-046/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-046/laurent-rosenfeld/perl/ch-1.pl25
-rw-r--r--challenge-046/laurent-rosenfeld/perl/ch-2.pl19
-rw-r--r--challenge-046/laurent-rosenfeld/raku/ch-1.p623
-rw-r--r--challenge-046/laurent-rosenfeld/raku/ch-2.p614
5 files changed, 82 insertions, 0 deletions
diff --git a/challenge-046/laurent-rosenfeld/blog.txt b/challenge-046/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..606496c69e
--- /dev/null
+++ b/challenge-046/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2020/02/perl-weekly-challenge-46-garbled-message-and-room-open.html
diff --git a/challenge-046/laurent-rosenfeld/perl/ch-1.pl b/challenge-046/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..6f11cf85fa
--- /dev/null
+++ b/challenge-046/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,25 @@
+use strict;
+use warnings;
+use feature "say";
+
+my $garbled = <<'END_MSG';
+P + 2 l ! a t o
+1 e 8 0 R $ 4 u
+5 - r ] + a > /
+P x w l b 3 k \
+2 e 3 5 R 8 y u
+< ! r ^ ( ) k 0
+END_MSG
+
+my @AoA = map { [ split /\s+/, $_] } split /[\r\n]+/, $garbled;
+my @transposed;
+for my $i (0 .. $#AoA) {
+ $transposed[$_][$i] = $AoA[$i][$_] for 0.. scalar @{$AoA[$i]} -1;
+}
+my @msg = "";
+for my $line_ref (@transposed) {
+ my %counter;
+ $counter{$_}++ for @$line_ref;
+ push @msg, grep { $counter{$_} > 1 } keys %counter;
+}
+say @msg;
diff --git a/challenge-046/laurent-rosenfeld/perl/ch-2.pl b/challenge-046/laurent-rosenfeld/perl/ch-2.pl
new file mode 100644
index 0000000000..115e1a23ee
--- /dev/null
+++ b/challenge-046/laurent-rosenfeld/perl/ch-2.pl
@@ -0,0 +1,19 @@
+use strict;
+use warnings;
+use feature "say";
+use Data::Dumper;
+use constant MAX => 50;
+
+# 1 => open, 0 => closed
+
+my @rooms = (1) x (MAX + 1); # (first employee)
+my $start = 1;
+for (2..MAX) {
+ $start++;
+ my $door = $start;
+ while ($door <= MAX) {
+ $rooms[$door] = $rooms[$door] ? 0 : 1;
+ $door += $start;
+ }
+}
+say join " ", @rooms[1..MAX];
diff --git a/challenge-046/laurent-rosenfeld/raku/ch-1.p6 b/challenge-046/laurent-rosenfeld/raku/ch-1.p6
new file mode 100644
index 0000000000..4aa8def134
--- /dev/null
+++ b/challenge-046/laurent-rosenfeld/raku/ch-1.p6
@@ -0,0 +1,23 @@
+use v6;
+
+my $garbled = q:to/END_MSG/;
+P + 2 l ! a t o
+1 e 8 0 R $ 4 u
+5 - r ] + a > /
+P x w l b 3 k \
+2 e 3 5 R 8 y u
+< ! r ^ ( ) k 0
+END_MSG
+
+my @AoA = map { my @a = split /\s+/, $_; @a }, split /<[\r\n]>+/, $garbled;
+my @transposed;
+for (0 .. @AoA.end) -> $i {
+ @transposed[$_][$i] = @AoA[$i][$_] for 0.. (@AoA[$i]).elems -1;
+}
+my @msg = "";
+for @transposed -> $line {
+ my BagHash $counter;
+ $counter{$_}++ for @$line;
+ push @msg, grep { $counter{$_} > 1 }, keys $counter;
+}
+say join "", @msg;
diff --git a/challenge-046/laurent-rosenfeld/raku/ch-2.p6 b/challenge-046/laurent-rosenfeld/raku/ch-2.p6
new file mode 100644
index 0000000000..1776578dc8
--- /dev/null
+++ b/challenge-046/laurent-rosenfeld/raku/ch-2.p6
@@ -0,0 +1,14 @@
+use v6;
+constant MAX = 50;
+my @rooms = 1 xx MAX + 1; # (first employee)
+my $start = 1;
+for 2..MAX {
+ $start++;
+ my $door = $start;
+ while $door <= MAX {
+ @rooms[$door] = @rooms[$door] ?? 0 !! 1;
+ $door += $start;
+ }
+ # say [+] @rooms[1..MAX];
+}
+say join " ", @rooms[1..MAX];