diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-12-04 10:44:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-04 10:44:29 +0000 |
| commit | 5cdd5189490a13918a9b276e2228949cefdb4491 (patch) | |
| tree | 64953ba1e397f8429d2bb2a5adb56d9f00f4d730 | |
| parent | cca0c6e5e3f9e2f5f37cf067e79648b9e5c638e2 (diff) | |
| parent | 1a2bb6c4ac4690b77ae34ef2bb29818268b3164b (diff) | |
| download | perlweeklychallenge-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.pl | 9 | ||||
| -rw-r--r-- | challenge-246/zapwai/perl/ch-2.pl | 67 |
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 ; |
