aboutsummaryrefslogtreecommitdiff
path: root/challenge-116
diff options
context:
space:
mode:
authorFlavio Poletti <flavio@polettix.it>2021-06-07 16:15:05 +0200
committerFlavio Poletti <flavio@polettix.it>2021-06-07 16:15:05 +0200
commitd37088228f3e174764863d386dafbbef5908d4fc (patch)
tree4dd2db03468c0c497011d2e8d0a513cb424685cb /challenge-116
parent4830b1d50fd610eb2424fe284cb48a2795e0478c (diff)
downloadperlweeklychallenge-club-d37088228f3e174764863d386dafbbef5908d4fc.tar.gz
perlweeklychallenge-club-d37088228f3e174764863d386dafbbef5908d4fc.tar.bz2
perlweeklychallenge-club-d37088228f3e174764863d386dafbbef5908d4fc.zip
Add polettix's solution to challenge-116
Diffstat (limited to 'challenge-116')
-rw-r--r--challenge-116/polettix/blog.txt1
-rw-r--r--challenge-116/polettix/blog1.txt1
-rw-r--r--challenge-116/polettix/perl/ch-1.pl27
-rw-r--r--challenge-116/polettix/perl/ch-2.pl15
-rw-r--r--challenge-116/polettix/raku/ch-1.raku26
-rw-r--r--challenge-116/polettix/raku/ch-2.raku16
6 files changed, 86 insertions, 0 deletions
diff --git a/challenge-116/polettix/blog.txt b/challenge-116/polettix/blog.txt
new file mode 100644
index 0000000000..7659deb9b9
--- /dev/null
+++ b/challenge-116/polettix/blog.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2021/06/09/pwc116-number-sequence/
diff --git a/challenge-116/polettix/blog1.txt b/challenge-116/polettix/blog1.txt
new file mode 100644
index 0000000000..2819f5199b
--- /dev/null
+++ b/challenge-116/polettix/blog1.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2021/06/10/pwc116-sum-of-squares/
diff --git a/challenge-116/polettix/perl/ch-1.pl b/challenge-116/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..7f9bfff4ff
--- /dev/null
+++ b/challenge-116/polettix/perl/ch-1.pl
@@ -0,0 +1,27 @@
+#!/usr/bin/env perl
+use 5.024;
+use warnings;
+use experimental qw< postderef signatures >;
+no warnings qw< experimental::postderef experimental::signatures >;
+
+sub number_sequence ($N) {
+ my $length = length $N;
+ SIZE:
+ for my $l (1 .. $length / 2) {
+ my @retval = my $x = substr $N, 0, $l;
+ my $start = $l;
+ ++$x;
+ while ((my $available = $length - $start) > 0) {
+ my $xlen = length $x;
+ next SIZE if $xlen > $available || substr($N, $start, $xlen) ne $x;
+ push @retval, $x;
+ $start += $xlen;
+ ++$x;
+ }
+ return @retval;
+ }
+ return $N;
+}
+
+my @inputs = @ARGV ? @ARGV : qw< 1234 91011 10203 >;
+say join ',', number_sequence($_) for @inputs;
diff --git a/challenge-116/polettix/perl/ch-2.pl b/challenge-116/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..62e45f605e
--- /dev/null
+++ b/challenge-116/polettix/perl/ch-2.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use 5.024;
+use warnings;
+use experimental qw< postderef signatures >;
+no warnings qw< experimental::postderef experimental::signatures >;
+use List::Util 'sum';
+
+sub sum_of_squares ($N) {
+ my $M = sum map { $_ * $_ } split(m{}mxs, $N);
+ my $m = int sqrt $M;
+ return $m * $m == $M ? 1 : 0;
+}
+
+my @inputs = @ARGV ? @ARGV : qw< 34 50 52 >;
+say sum_of_squares($_) for @inputs;
diff --git a/challenge-116/polettix/raku/ch-1.raku b/challenge-116/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..0fbc9bd2e7
--- /dev/null
+++ b/challenge-116/polettix/raku/ch-1.raku
@@ -0,0 +1,26 @@
+#!/usr/bin/env raku
+use v6;
+
+sub number-sequence (Int $N where * >= 10) {
+ my $Nlength = $N.chars;
+ SIZE:
+ for 1 .. ($Nlength / 2) -> $l {
+ my @retval = my $x = $N.substr(0, $l);
+ my $start = $l;
+ ++$x;
+ while (my $available = $Nlength - $start) > 0 {
+ my $xlen = $x.chars;
+ next SIZE if $xlen > $available || $N.substr($start, $xlen) ne $x;
+ @retval.push($x);
+ $start += $xlen;
+ ++$x;
+ }
+ return @retval;
+ }
+ return $N;
+}
+
+sub MAIN (*@inputs) {
+ @inputs = < 1234 91011 10203 > unless @inputs.elems;
+ number-sequence($_).join(',').put for @inputs;
+}
diff --git a/challenge-116/polettix/raku/ch-2.raku b/challenge-116/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..801ced0405
--- /dev/null
+++ b/challenge-116/polettix/raku/ch-2.raku
@@ -0,0 +1,16 @@
+#!/usr/bin/env raku
+use v6;
+use MONKEY-TYPING;
+
+augment class Int {
+ method is-square (--> Bool:D) { self == self.sqrt.Int ** 2 }
+}
+
+sub sum-of-squares (Int $N where * >= 10 --> Int:D) {
+ $N.comb.map(* ** 2).sum.is-square ?? 1 !! 0;
+}
+
+sub MAIN (*@inputs) {
+ @inputs = < 34 50 52 > unless @inputs.elems;
+ sum-of-squares($_).put for @inputs;
+}