aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-01-28 10:35:35 +0000
committerGitHub <noreply@github.com>2025-01-28 10:35:35 +0000
commit4891b68da606f1721238b16c315205e64c7db33d (patch)
tree0fae86000bff73a90a6272c56c7fad3fefbe50c4
parentfe650d1db387066f1ec7a736f4a7e1afa16f03d2 (diff)
parente7101148e684751594b892cec61b55bb444b21df (diff)
downloadperlweeklychallenge-club-4891b68da606f1721238b16c315205e64c7db33d.tar.gz
perlweeklychallenge-club-4891b68da606f1721238b16c315205e64c7db33d.tar.bz2
perlweeklychallenge-club-4891b68da606f1721238b16c315205e64c7db33d.zip
Merge pull request #11501 from zapwai/branch-for-306
Week 306
-rw-r--r--challenge-306/zapwai/perl/ch-1.pl39
-rw-r--r--challenge-306/zapwai/perl/ch-2.pl63
2 files changed, 102 insertions, 0 deletions
diff --git a/challenge-306/zapwai/perl/ch-1.pl b/challenge-306/zapwai/perl/ch-1.pl
new file mode 100644
index 0000000000..dbfcb3622b
--- /dev/null
+++ b/challenge-306/zapwai/perl/ch-1.pl
@@ -0,0 +1,39 @@
+use v5.38;
+sub proc(@ints) {
+ say "Input: \@ints = @ints";
+ my $total = 0;
+ for my $o (1 .. @ints) {
+ next if ($o % 2 == 0);
+ my $last = @ints - $o;
+ for my $shift (0 .. $last) {
+ my $sum = 0;
+ my $n = $o;
+ for my $i (1 .. $n) {
+ $sum += $ints[$shift + $i - 1];
+ }
+ $total += $sum;
+ }
+ }
+ # Read incorrectly the first time.
+ # Here is all subsets of odd length.
+ # for my $num (0 .. 2**@ints - 1) {
+ # my $form = "%0" . @ints . "b";
+ # my $x = sprintf($form, $num);
+ # my $count = 0;
+ # my @dig = split "", $x;
+ # for my $i (@dig) {
+ # $count++ if ($i == 1);
+ # }
+ # next unless ($count % 2 == 1);
+ # my $sum = 0;
+ # for (0 .. $#dig) {
+ # $sum += $ints[$_] if ($dig[$_] == 1);
+ # $total += $sum;
+ # }
+ say "Output: $total";
+}
+
+my @ints = (2,5,3,6,4);
+proc(@ints);
+@ints = (1,3);
+proc(@ints);
diff --git a/challenge-306/zapwai/perl/ch-2.pl b/challenge-306/zapwai/perl/ch-2.pl
new file mode 100644
index 0000000000..26ea7fd2ca
--- /dev/null
+++ b/challenge-306/zapwai/perl/ch-2.pl
@@ -0,0 +1,63 @@
+use v5.38;
+use List::Util qw( max );
+
+sub drop2($ind1, $ind2, @l) {
+ if ($ind1 > $ind2) {
+ splice @l, $ind1, 1;
+ splice @l, $ind2, 1;
+ } else {
+ splice @l, $ind2, 1;
+ splice @l, $ind1, 1;
+ }
+
+ return @l;
+}
+
+sub churn(@l) {
+ my $max1 = max(@l);
+ my $max2 = 0;
+ my ($ind1, $ind2) = (0, 0);
+ my $found = 0;
+ for my $i (0 .. $#l) {
+ if ($found) {
+ if ($max2 < $l[$i]) {
+ $max2 = $l[$i];
+ $ind2 = $i;
+ }
+ } else {
+ if ($l[$i] == $max1) {
+ $found = 1;
+ $ind1 = $i;
+ next;
+ } else {
+ if ($max2 < $l[$i]) {
+ $max2 = $l[$i];
+ $ind2 = $i;
+ }
+ }
+ }
+ }
+ $found = 0;
+ if ($max1 == $max2) {
+ @l = drop2($ind1, $ind2, @l);
+ } else {
+ my $newval = $max1 - $max2;
+ @l = drop2($ind1, $ind2, @l);
+ push @l, $newval;
+ }
+ return @l;
+}
+
+sub proc(@ints) {
+ say "Input: \@ints = @ints";
+ do {
+ @ints = churn(@ints);
+ } while (@ints > 1);
+ print "Output: ";
+ say $ints[0] // 0;
+}
+
+my @ints = (3, 8, 5, 2, 9, 2);
+proc(@ints);
+@ints = (3, 2, 5);
+proc(@ints);