diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-01-28 10:35:35 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-28 10:35:35 +0000 |
| commit | 4891b68da606f1721238b16c315205e64c7db33d (patch) | |
| tree | 0fae86000bff73a90a6272c56c7fad3fefbe50c4 /challenge-306 | |
| parent | fe650d1db387066f1ec7a736f4a7e1afa16f03d2 (diff) | |
| parent | e7101148e684751594b892cec61b55bb444b21df (diff) | |
| download | perlweeklychallenge-club-4891b68da606f1721238b16c315205e64c7db33d.tar.gz perlweeklychallenge-club-4891b68da606f1721238b16c315205e64c7db33d.tar.bz2 perlweeklychallenge-club-4891b68da606f1721238b16c315205e64c7db33d.zip | |
Merge pull request #11501 from zapwai/branch-for-306
Week 306
Diffstat (limited to 'challenge-306')
| -rw-r--r-- | challenge-306/zapwai/perl/ch-1.pl | 39 | ||||
| -rw-r--r-- | challenge-306/zapwai/perl/ch-2.pl | 63 |
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); |
