aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-10-27 10:55:32 +0100
committerGitHub <noreply@github.com>2021-10-27 10:55:32 +0100
commit5a87803e2ef44a0f0a0bd2f9fa6f0024fa0d4c09 (patch)
tree1c242520b4794e66276f1d1ace9bf8afcbfd2457
parent4e2fa309014610ee3f8fc4aa6329326722570081 (diff)
parent5c2c896b413eeb0a1311eccfdd6d884c7e6d9834 (diff)
downloadperlweeklychallenge-club-5a87803e2ef44a0f0a0bd2f9fa6f0024fa0d4c09.tar.gz
perlweeklychallenge-club-5a87803e2ef44a0f0a0bd2f9fa6f0024fa0d4c09.tar.bz2
perlweeklychallenge-club-5a87803e2ef44a0f0a0bd2f9fa6f0024fa0d4c09.zip
Merge pull request #5110 from Abigail/abigail/week-136
Abigail/week 136
-rw-r--r--challenge-136/abigail/README.md2
-rw-r--r--challenge-136/abigail/c/ch-1.c4
-rw-r--r--challenge-136/abigail/pascal/ch-1.p64
-rw-r--r--challenge-136/abigail/pascal/ch-2.p27
4 files changed, 95 insertions, 2 deletions
diff --git a/challenge-136/abigail/README.md b/challenge-136/abigail/README.md
index df95d28447..b1b1f2b0ef 100644
--- a/challenge-136/abigail/README.md
+++ b/challenge-136/abigail/README.md
@@ -10,6 +10,7 @@
* [Java](java/ch-1.java)
* [Lua](lua/ch-1.lua)
* [Node.js](node/ch-1.js)
+* [Pascal](pascal/ch-1.p)
* [Perl](perl/ch-1.pl)
* [Python](python/ch-1.py)
* [R](r/ch-1.r)
@@ -27,6 +28,7 @@
* [Java](java/ch-2.java)
* [Lua](lua/ch-2.lua)
* [Node.js](node/ch-2.js)
+* [Pascal](pascal/ch-2.p)
* [Perl](perl/ch-2.pl)
* [Python](python/ch-2.py)
* [R](r/ch-2.r)
diff --git a/challenge-136/abigail/c/ch-1.c b/challenge-136/abigail/c/ch-1.c
index d1c218aee5..d6fcc4d898 100644
--- a/challenge-136/abigail/c/ch-1.c
+++ b/challenge-136/abigail/c/ch-1.c
@@ -20,8 +20,8 @@ long long gcd (long long u, long long v) {
long long u_odd = u % 2;
long long v_odd = v % 2;
- return u == v || !v ? u
- : !u ? v
+ return u == v || !v ? u
+ : !u ? v
: !u_odd && !v_odd ? gcd (u >> 1, v >> 1) << 1
: !u_odd && v_odd ? gcd (u >> 1, v)
: u_odd && !v_odd ? gcd (u, v >> 1)
diff --git a/challenge-136/abigail/pascal/ch-1.p b/challenge-136/abigail/pascal/ch-1.p
new file mode 100644
index 0000000000..391a4fe69f
--- /dev/null
+++ b/challenge-136/abigail/pascal/ch-1.p
@@ -0,0 +1,64 @@
+Program XXX;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-1.out ch-1.p; ./ch-1.out < input-file *)
+(* *)
+
+(* *)
+(* Find the GCD, using Stein's algorithm *)
+(* (https://en.wikipedia.org/wiki/Binary_GCD_algorithm) *)
+(* *)
+function gcd (u, v: integer): integer;
+ var
+ u_odd, v_odd: boolean;
+
+ begin
+ u_odd := u mod 2 <> 0;
+ v_odd := v mod 2 <> 0;
+
+ if (u = v) or (v = 0) then gcd := u
+ else if (u = 0) then gcd := v
+ else if not u_odd and not v_odd then gcd := gcd (u >> 1, v >> 1) << 1
+ else if not u_odd and v_odd then gcd := gcd (u >> 1, v)
+ else if u_odd and not v_odd then gcd := gcd (u, v >> 1)
+ else if u > v then gcd := gcd (u - v, v)
+ else gcd := gcd (v - u, u);
+ end;
+
+
+(* *)
+(* Return true if number is a power of n, that is, number == n ^ p *)
+(* for some non-negative integer p. Return false otherwise. *)
+(* *)
+function is_power_of_n (number, n: integer): boolean;
+ begin
+ if number < 1 then is_power_of_n := false
+ else if number = 1 then is_power_of_n := true
+ else if number mod n <> 0 then is_power_of_n := false
+ else is_power_of_n := is_power_of_n (number div n, n);
+ end;
+
+function is_power_of_2 (number: integer): boolean;
+ begin
+ is_power_of_2 := is_power_of_n (number, 2);
+ end;
+
+
+
+var
+ m, n, r: integer;
+
+begin
+ while (not eof) do begin
+ readln (m, n);
+ r := gcd (m, n);
+ if (r > 1) and is_power_of_2 (r) then
+ writeln (1)
+ else
+ writeln (0)
+ end
+end.
diff --git a/challenge-136/abigail/pascal/ch-2.p b/challenge-136/abigail/pascal/ch-2.p
new file mode 100644
index 0000000000..6515b4e5ca
--- /dev/null
+++ b/challenge-136/abigail/pascal/ch-2.p
@@ -0,0 +1,27 @@
+Program XXX;
+
+(* *)
+(* See ../README.md *)
+(* *)
+
+(* *)
+(* Run as: fpc -och-2.out ch-2.p; ./ch-2.out < input-file *)
+(* *)
+
+function count (target, this_fib, prev_fib: integer): integer;
+ begin
+ if target < this_fib then count := 0
+ else if target = this_fib then count := 1
+ else count := count (target - this_fib, this_fib + prev_fib, this_fib) +
+ count (target, this_fib + prev_fib, this_fib);
+ end;
+
+var
+ n: integer;
+
+begin
+ while (not eof) do begin
+ readln (n);
+ writeln (count (n, 1, 1));
+ end
+end.