aboutsummaryrefslogtreecommitdiff
path: root/challenge-252
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-01-16 18:29:21 +0000
committerGitHub <noreply@github.com>2024-01-16 18:29:21 +0000
commitc68f9508162d5fa3eb7d16fbe7969c172b5ab4a7 (patch)
tree0c3dd55ed6a60f5abfad2ef92f5c0d2df252a074 /challenge-252
parent0743c3a72e7b35b3c6a67b249b6c7d7e322cc0f7 (diff)
parent73704e823a01f00d461dac41dfae852471186d34 (diff)
downloadperlweeklychallenge-club-c68f9508162d5fa3eb7d16fbe7969c172b5ab4a7.tar.gz
perlweeklychallenge-club-c68f9508162d5fa3eb7d16fbe7969c172b5ab4a7.tar.bz2
perlweeklychallenge-club-c68f9508162d5fa3eb7d16fbe7969c172b5ab4a7.zip
Merge pull request #9407 from E7-87-83/newt
Week 252
Diffstat (limited to 'challenge-252')
-rw-r--r--challenge-252/cheok-yin-fung/perl/ch-1.pl20
-rw-r--r--challenge-252/cheok-yin-fung/perl/ch-2.pl23
2 files changed, 43 insertions, 0 deletions
diff --git a/challenge-252/cheok-yin-fung/perl/ch-1.pl b/challenge-252/cheok-yin-fung/perl/ch-1.pl
new file mode 100644
index 0000000000..d76ccfecda
--- /dev/null
+++ b/challenge-252/cheok-yin-fung/perl/ch-1.pl
@@ -0,0 +1,20 @@
+# The Weekly Challenge 252
+# Task 1 Special Numbers
+use v5.30.0;
+use warnings;
+use Math::Prime::Util qw/divisors/;
+
+sub sn {
+ my @ints = @_;
+ my @divisors = divisors(scalar @ints);
+ my $sum = 0;
+ for (@divisors) {
+ my $j = $_-1;
+ $sum += $ints[$j]*$ints[$j]
+ }
+ return $sum;
+}
+
+use Test::More tests=>2;
+ok sn(1,2,3,4)==21;
+ok sn(2, 7, 1, 19, 18, 3)==63;
diff --git a/challenge-252/cheok-yin-fung/perl/ch-2.pl b/challenge-252/cheok-yin-fung/perl/ch-2.pl
new file mode 100644
index 0000000000..03c3366077
--- /dev/null
+++ b/challenge-252/cheok-yin-fung/perl/ch-2.pl
@@ -0,0 +1,23 @@
+# The Weekly Challenge 252
+# Task 2 Unique Sum Zero
+# Generate all combinations sum to zero,
+# [optionally] given a lower bound and an upper bound
+use v5.30.0;
+use warnings;
+use List::Util qw/sum/;
+use Algorithm::Combinatorics qw/combinations/;
+
+sub sz {
+ my $n = $_[0];
+ die "Invalid n\n" if $n <= 0;
+ my $lower = $_[1] || -$n;
+ my $upper = $_[2] || $n;
+ my @arr = ($lower..$upper);
+ my $iter = combinations(\@arr, $n);
+ while (my $c = $iter->next) {
+ my @com = $c->@*;
+ say "@com" if 0 == sum @com;
+ }
+}
+
+sz @ARGV || (5,-5,4);