diff options
| author | Abigail <abigail@abigail.be> | 2021-10-26 22:38:12 +0200 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-10-26 22:38:12 +0200 |
| commit | 53d823d75cac72508ac53012f35e9068bd5c2b1d (patch) | |
| tree | b9aa78c40a0d93caf5bea13fc62438dfe4faaed8 | |
| parent | 7bf4f5be8abe72306ce59ebbd52a8686f2d119e6 (diff) | |
| download | perlweeklychallenge-club-53d823d75cac72508ac53012f35e9068bd5c2b1d.tar.gz perlweeklychallenge-club-53d823d75cac72508ac53012f35e9068bd5c2b1d.tar.bz2 perlweeklychallenge-club-53d823d75cac72508ac53012f35e9068bd5c2b1d.zip | |
Pascal solutions for week 136
| -rw-r--r-- | challenge-136/abigail/README.md | 2 | ||||
| -rw-r--r-- | challenge-136/abigail/pascal/ch-1.p | 64 | ||||
| -rw-r--r-- | challenge-136/abigail/pascal/ch-2.p | 27 |
3 files changed, 93 insertions, 0 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/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. |
