aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-12-04 10:44:29 +0000
committerGitHub <noreply@github.com>2023-12-04 10:44:29 +0000
commit5cdd5189490a13918a9b276e2228949cefdb4491 (patch)
tree64953ba1e397f8429d2bb2a5adb56d9f00f4d730
parentcca0c6e5e3f9e2f5f37cf067e79648b9e5c638e2 (diff)
parent1a2bb6c4ac4690b77ae34ef2bb29818268b3164b (diff)
downloadperlweeklychallenge-club-5cdd5189490a13918a9b276e2228949cefdb4491.tar.gz
perlweeklychallenge-club-5cdd5189490a13918a9b276e2228949cefdb4491.tar.bz2
perlweeklychallenge-club-5cdd5189490a13918a9b276e2228949cefdb4491.zip
Merge pull request #9187 from zapwai/branch-for-246
Week 246
-rw-r--r--challenge-246/zapwai/perl/ch-1.pl9
-rw-r--r--challenge-246/zapwai/perl/ch-2.pl67
2 files changed, 76 insertions, 0 deletions
diff --git a/challenge-246/zapwai/perl/ch-1.pl b/challenge-246/zapwai/perl/ch-1.pl
new file mode 100644
index 0000000000..64d322645d
--- /dev/null
+++ b/challenge-246/zapwai/perl/ch-1.pl
@@ -0,0 +1,9 @@
+use v5.30;
+my @nums;
+do {
+ my $x = 1 + int rand 49;
+ unless ( grep(/$x/, @nums) ) {
+ push @nums, $x;
+ }
+} while (@nums != 6);
+say join(", ", sort {$a <=> $b} @nums);
diff --git a/challenge-246/zapwai/perl/ch-2.pl b/challenge-246/zapwai/perl/ch-2.pl
new file mode 100644
index 0000000000..3d08d5008e
--- /dev/null
+++ b/challenge-246/zapwai/perl/ch-2.pl
@@ -0,0 +1,67 @@
+use v5.30;
+my @a = (1,1,2,3,5);
+#@a = (4,2,4,5,7);
+#@a = (4,1,2,-3,8);
+#@a = (-4, 2, -2, 0, -2);
+my $p = myp(@a);
+my $q = myq($p,@a);
+say "Input: \@a = @a";
+print "Output: ";
+if ( ($p !~ /^-?\d+$/) || ($q !~ /^-?\d+$/) ) {
+ say "False";
+} elsif (check($p, $q, @a)) {
+ say "True \t(p = $p, q = $q)";
+}
+
+sub myp {
+ my @a = @_;
+ my $p = ($a[3]*$a[3] - $a[2]*$a[4]) / ($a[3]*$a[1] - $a[2]*$a[2]);
+ return $p;
+}
+sub myq {
+ my ($p,@a) = @_;
+ my $q;
+ if ($a[3] != 0) {
+ $q = ($a[4] - $p*$a[2]) / $a[3];
+ } else {
+ $q = ($a[2] - $p*$a[0]) / $a[1];
+ }
+ return $q;
+}
+sub check {
+ # check the first eqn, unused in the above formulas.
+ # pa0 + qa1 = a2
+ my ($p, $q, @a) = @_;
+ if ($a[3] != 0) {
+ return 1 if ($p * $a[0] + $q * $a[1] == $a[2]);
+ } else {
+ return 1 if ($p * $a[2] + $q * $a[3] == $a[4]);
+ }
+ 0
+}
+
+# (a3a1 - a2^2) * p = a3^2 - a2a4 ;
+# q = (a4 - p*a2) / a3 ;
+# q = (a3 - pa1) / a2 ;
+# a2 and a3 cannot both be zero.
+
+### a[n] = p * a[n-2] + q * a[n-1] with n > 1 (p,q ints)
+
+# pa0 + qa1 = a2
+# pa1 + qa2 = a3
+# pa2 + qa3 = a4
+
+# (in general)
+# p(pa0 + qa1) + q(pa1 + qpa0 + qqa1) = a4
+# ppa0 + pqa1 + qpa1 + qqpa0 + qqqa1 = a4
+# a0(p^2 + q^2p) + a1(2pq + q^3) = a4
+
+# Using third eqn specifically:
+# q = (a4 - p*a2) / a3 ;
+# (We can use first eqn instead, if a3 = 0.)
+# p = (a3 - q*a2) / a1 ;
+# = (a3 - (a4 - p*a2)*a2/a3) / a1 ;
+# = (a3 - a2a4/a3 + p*a2^2/a3) / a1 ;
+# = a3/a1 - a2a4/a3a1 + p*a2^2/a3a1 ;
+
+# (a3a1 - a2^2) * p = a3^2 - a2a4 ;