aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlavio Poletti <flavio@polettix.it>2022-07-13 22:15:38 +0200
committerFlavio Poletti <flavio@polettix.it>2022-07-13 22:15:38 +0200
commit55efd0e3387d4d3ce39d18b08420b1cd8c9a84be (patch)
tree9868e95016b6af05afc79829a102c8b7902ada55
parent10f345b1d42afeed7d06cba5b013f683eca1e56a (diff)
downloadperlweeklychallenge-club-55efd0e3387d4d3ce39d18b08420b1cd8c9a84be.tar.gz
perlweeklychallenge-club-55efd0e3387d4d3ce39d18b08420b1cd8c9a84be.tar.bz2
perlweeklychallenge-club-55efd0e3387d4d3ce39d18b08420b1cd8c9a84be.zip
Add polettix's solution to challenge-173
-rw-r--r--challenge-173/polettix/blog.txt1
-rw-r--r--challenge-173/polettix/blog1.txt1
-rw-r--r--challenge-173/polettix/perl/ch-1.pl22
-rw-r--r--challenge-173/polettix/perl/ch-2.pl14
-rw-r--r--challenge-173/polettix/raku/ch-1.raku18
-rw-r--r--challenge-173/polettix/raku/ch-2.raku13
6 files changed, 69 insertions, 0 deletions
diff --git a/challenge-173/polettix/blog.txt b/challenge-173/polettix/blog.txt
new file mode 100644
index 0000000000..28e3719dbd
--- /dev/null
+++ b/challenge-173/polettix/blog.txt
@@ -0,0 +1 @@
+https://etoobusy.polettix.it/2022/07/13/pwc173-esthetic-number/
diff --git a/challenge-173/polettix/blog1.txt b/challenge-173/polettix/blog1.txt
new file mode 100644
index 0000000000..efc7719be3
--- /dev/null
+++ b/challenge-173/polettix/blog1.txt
@@ -0,0 +1 @@
+https://etoobusy.polettix.it/2022/07/14/pwc173-sylvester-s-sequence/
diff --git a/challenge-173/polettix/perl/ch-1.pl b/challenge-173/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..df7531387f
--- /dev/null
+++ b/challenge-173/polettix/perl/ch-1.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+say is_esthetic($_) ? "$_ is esthetic" : "$_ is NOT esthetic"
+ for @ARGV;
+
+sub is_esthetic ($candidate) {
+ test_adjacents(
+ sub ($x, $y) { use integer; abs($x - $y) == 1 },
+ split m{}mxs, $candidate
+ );
+}
+
+sub test_adjacents ($test, @input) {
+ for my $i (1 .. $#input) {
+ return 0 unless $test->(@input[$i - 1, $i]);
+ }
+ return 1;
+}
diff --git a/challenge-173/polettix/perl/ch-2.pl b/challenge-173/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..d61aa0abaa
--- /dev/null
+++ b/challenge-173/polettix/perl/ch-2.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+use Math::BigInt;
+
+my $it = sylvester_sequence_it();
+say $it->() for 1 .. shift // 10;
+
+sub sylvester_sequence_it {
+ my $n;
+ return sub { $n = $n ? 1 + $n * ($n - 1) : Math::BigInt->new(2) }
+}
diff --git a/challenge-173/polettix/raku/ch-1.raku b/challenge-173/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..b3b01dad9b
--- /dev/null
+++ b/challenge-173/polettix/raku/ch-1.raku
@@ -0,0 +1,18 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (*@candidates) {
+ put is-esthetic($_) ?? "$_ is esthetic" !! "$_ is NOT esthetic"
+ for @candidates;
+ return 0;
+}
+
+sub is-esthetic ($candidate) {
+ test-adjacents(-> $x, $y { abs($x - $y) == 1 }, $candidate.comb());
+}
+
+sub test-adjacents (&test, *@input) {
+ for 1 ..^ @input -> $i {
+ return False unless &test(|@input[$i - 1, $i]);
+ }
+ return True;
+}
diff --git a/challenge-173/polettix/raku/ch-2.raku b/challenge-173/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..dde13582e7
--- /dev/null
+++ b/challenge-173/polettix/raku/ch-2.raku
@@ -0,0 +1,13 @@
+#!/usr/bin/env raku
+use v6;
+
+class sylvester-sequence { ... };
+sub MAIN (Int:D $count = 10) {
+ my $ssq = sylvester-sequence.new();
+ put $ssq.next for 1 .. $count;
+}
+
+class sylvester-sequence {
+ has $!n;
+ method next { $!n = $!n ?? 1 + $!n * ($!n - 1) !! 2 }
+}