diff options
| author | Ryan Thompson <i@ry.ca> | 2022-05-28 17:30:01 -0600 |
|---|---|---|
| committer | Ryan Thompson <i@ry.ca> | 2022-05-28 17:30:01 -0600 |
| commit | c380cb7208d70aef788ea6b9272aba8face3482a (patch) | |
| tree | 6b3e4b994940ca76824902ed462971d16bf1b08f | |
| parent | 8224c5093c6e533f4e426611ec21a872210dd560 (diff) | |
| download | perlweeklychallenge-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.md | 12 | ||||
| -rwxr-xr-x | challenge-077/ryan-thompson/perl/ch-1.pl | 25 | ||||
| -rwxr-xr-x | challenge-077/ryan-thompson/perl/ch-2.pl | 42 |
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; +} |
