aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Thompson <i@ry.ca>2022-05-28 17:30:01 -0600
committerRyan Thompson <i@ry.ca>2022-05-28 17:30:01 -0600
commitc380cb7208d70aef788ea6b9272aba8face3482a (patch)
tree6b3e4b994940ca76824902ed462971d16bf1b08f
parent8224c5093c6e533f4e426611ec21a872210dd560 (diff)
downloadperlweeklychallenge-club-c380cb7208d70aef788ea6b9272aba8face3482a.tar.gz
perlweeklychallenge-club-c380cb7208d70aef788ea6b9272aba8face3482a.tar.bz2
perlweeklychallenge-club-c380cb7208d70aef788ea6b9272aba8face3482a.zip
rjt's week 77 Perl solutions (v. belated)
-rw-r--r--challenge-077/ryan-thompson/README.md12
-rwxr-xr-xchallenge-077/ryan-thompson/perl/ch-1.pl25
-rwxr-xr-xchallenge-077/ryan-thompson/perl/ch-2.pl42
3 files changed, 71 insertions, 8 deletions
diff --git a/challenge-077/ryan-thompson/README.md b/challenge-077/ryan-thompson/README.md
index 698e3ee64f..92d6fbb5b7 100644
--- a/challenge-077/ryan-thompson/README.md
+++ b/challenge-077/ryan-thompson/README.md
@@ -1,19 +1,15 @@
# Ryan Thompson
-## Week 056 Solutions
+## Week 077 Solutions
-### Task 1 › Diff-K
+### Task 1 › Fibonacci Sum
* [Perl](perl/ch-1.pl)
- * [Raku](raku/ch-1.p6)
-### Task 2 › Path Sum
+### Task 2 › Lonely X
* [Perl](perl/ch-2.pl)
- * [Raku](raku/ch-2.p6)
## Blogs
- * [Diff-K](https://ry.ca/2020/04/diff-k/)
- * [Path Sum](https://ry.ca/2020/04/path-sum/)
-
+ * None this week.
diff --git a/challenge-077/ryan-thompson/perl/ch-1.pl b/challenge-077/ryan-thompson/perl/ch-1.pl
new file mode 100755
index 0000000000..a1b3dd7c29
--- /dev/null
+++ b/challenge-077/ryan-thompson/perl/ch-1.pl
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+#
+# ch-1.pl - Fibonacci Sum
+#
+# 2022 Ryan Thompson <rjt@cpan.org>
+
+use 5.016;
+use warnings;
+use strict;
+no warnings 'uninitialized';
+
+my $N = shift // die "Usage: $0 <integer>\n";
+
+my @fib = (1,2);
+push @fib, $fib[-1] + $fib[-2] while $fib[-1] < $N;
+pop @fib if $fib[-1] > $N;
+
+sub {
+ my $n = shift;
+
+ return say join(" + ", @_) . " == $N" if $n == 0;
+
+ __SUB__->($n-$_, @_, $_) for grep { $_ <= $n and $_ > $_[-1] } @fib;
+
+}->($N);
diff --git a/challenge-077/ryan-thompson/perl/ch-2.pl b/challenge-077/ryan-thompson/perl/ch-2.pl
new file mode 100755
index 0000000000..170a3977dd
--- /dev/null
+++ b/challenge-077/ryan-thompson/perl/ch-2.pl
@@ -0,0 +1,42 @@
+#!/usr/bin/env perl
+#
+# ch-2.pl - Lonely X
+#
+# 2022 Ryan Thompson <rjt@cpan.org>
+
+use 5.010;
+use warnings;
+use strict;
+use List::Util qw< any all >;
+
+sub X() { $_->[1] } # Convenient aliases
+sub Y() { $_->[0] } # (syntactic sugar!)
+
+my @ex2 = ([ qw< o o x o > ],
+ [ qw< x o o o > ],
+ [ qw< x o o x > ],
+ [ qw< o x o o > ]);
+
+say "There are " . lonely_x(@ex2) . " lonely 'x's";
+
+sub lonely_x {
+ my $xmax = $#{$_[0]};
+ my $count = 0;
+
+ for my $y (0..$#_) {
+ for my $x (0..$xmax) {
+ next if $_[$y][$x] ne 'x';
+
+ next if any { $_[Y][X] eq 'x' }
+ grep { Y >= 0 && Y <= $#_
+ and X >= 0 && X <= $xmax }
+ map { [ $y+Y, $x+X ] }
+ grep { not (X == 0 && Y == 0) }
+ map { my $yp = $_; map { [$yp,$_] } -1..1 } -1..1;
+
+ say "x at row $y, col $x is lonely";
+ $count++;
+ }
+ }
+ $count;
+}