aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-10-31 16:40:49 +0000
committerGitHub <noreply@github.com>2023-10-31 16:40:49 +0000
commit0f118044c3d954fa4bbb3cbf15a0a05b5733f313 (patch)
treeca1892950e9c6c21de3abd6c968394d4535079c5
parentfd8e62f616dfb207ce9891f448e279b7385ad1a6 (diff)
parent193f81ec4afbfcc448a7695f81eef0e2193c804d (diff)
downloadperlweeklychallenge-club-0f118044c3d954fa4bbb3cbf15a0a05b5733f313.tar.gz
perlweeklychallenge-club-0f118044c3d954fa4bbb3cbf15a0a05b5733f313.tar.bz2
perlweeklychallenge-club-0f118044c3d954fa4bbb3cbf15a0a05b5733f313.zip
Merge pull request #8974 from zapwai/branch-for-241
Week 241
-rw-r--r--challenge-241/zapwai/perl/ch-1.pl24
-rw-r--r--challenge-241/zapwai/perl/ch-2.pl59
2 files changed, 83 insertions, 0 deletions
diff --git a/challenge-241/zapwai/perl/ch-1.pl b/challenge-241/zapwai/perl/ch-1.pl
new file mode 100644
index 0000000000..8bab017a33
--- /dev/null
+++ b/challenge-241/zapwai/perl/ch-1.pl
@@ -0,0 +1,24 @@
+use v5.30;
+my @nums = (0, 1, 4, 6, 7, 10);
+my $diff = 3;
+print "Input: \@nums = (". join(", ", @nums) . ")";
+say "\t\$diff = $diff";
+my ($cnt,$output);
+foreach my $i (0 .. $#nums - 2) {
+ foreach my $j ($i + 1 .. $#nums - 1) {
+ foreach my $k ($j + 1 .. $#nums) {
+ if ( is_trip($diff, $nums[$i],$nums[$j],$nums[$k]) ) {
+ $output .= "($nums[$i],$nums[$j],$nums[$k])\n";
+ $cnt++;
+ }
+ }
+ }
+}
+say "Output: $cnt";
+chomp $output;
+say $output;
+sub is_trip {
+ my ($diff, $a, $b, $c) = @_;
+ return 1 if ( ($b - $a == $diff) && ($c - $b == $diff) );
+ 0
+}
diff --git a/challenge-241/zapwai/perl/ch-2.pl b/challenge-241/zapwai/perl/ch-2.pl
new file mode 100644
index 0000000000..fed80beca2
--- /dev/null
+++ b/challenge-241/zapwai/perl/ch-2.pl
@@ -0,0 +1,59 @@
+use v5.30;
+my @int = (11, 8, 27, 4);
+say "Input: \@int = (". join(", ", @int) . ")";
+my $max = 0;
+foreach my $v (@int) {
+ $max = $v if ($v > $max);
+}
+my @prime = myprimes($max);
+my @factor = map {factors($_)} @int;
+my @ans = @int;
+my $flag = 0;
+do {
+ $flag = 0;
+ foreach my $i (0 .. $#factor - 1) {
+ if ( ($factor[$i] > $factor[$i + 1]) ||
+ ( ($factor[$i] == $factor[$i+1]) && ($ans[$i] > $ans[$i+1]) )
+ ) {
+ $flag++;
+ my $aval = $ans[$i];
+ my $fval = $factor[$i];
+ $ans[$i] = $ans[$i+1];
+ $ans[$i + 1] = $aval;
+ $factor[$i] = $factor[$i+1];
+ $factor[$i+1] = $fval;
+ }
+ }
+} while ($flag);
+print "Output: (";
+say join(", ",@ans) . ")";
+sub factors {
+ my $num = shift;
+ my @list;
+ do {
+ foreach my $factor (@prime) {
+ if ( $num % $factor == 0 ) {
+ push @list, $factor;
+ $num = $num / $factor;
+ }
+ }
+ } while ($num != 1);
+ return $#list+1;
+}
+
+sub myprimes {
+ my $N = shift;
+ my @p = (2);
+ for my $i (3 .. $N) {
+ push @p, $i if is_prime($i);
+ }
+ @p
+}
+
+sub is_prime {
+ my $num = shift;
+ for my $i (2 .. sqrt($num)) {
+ return 0 if ( $num % $i == 0 );
+ }
+ 1
+}