diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-01-09 22:58:03 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-01-09 22:58:03 +0000 |
| commit | 53aa89533816a39ca9d108e0198bfa79f9bb2fe8 (patch) | |
| tree | 346664b4b0b550ff2099479c052036c2b6301800 /challenge-146 | |
| parent | 29494c5072ffe550c5a4de99332403e46775550e (diff) | |
| download | perlweeklychallenge-club-53aa89533816a39ca9d108e0198bfa79f9bb2fe8.tar.gz perlweeklychallenge-club-53aa89533816a39ca9d108e0198bfa79f9bb2fe8.tar.bz2 perlweeklychallenge-club-53aa89533816a39ca9d108e0198bfa79f9bb2fe8.zip | |
- Added more guest contributions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-146')
| -rw-r--r-- | challenge-146/laurent-rosenfeld/awk/ch-2.awk | 26 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/c/ch-2.c | 21 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/julia/ch-1.jl | 24 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/kotlin/ch-2.kt | 19 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/lua/ch-2.lua | 22 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/ruby/ch-2.rb | 15 | ||||
| -rw-r--r-- | challenge-146/laurent-rosenfeld/scala/ch-2.scala | 18 |
7 files changed, 145 insertions, 0 deletions
diff --git a/challenge-146/laurent-rosenfeld/awk/ch-2.awk b/challenge-146/laurent-rosenfeld/awk/ch-2.awk new file mode 100644 index 0000000000..5bb11d3c98 --- /dev/null +++ b/challenge-146/laurent-rosenfeld/awk/ch-2.awk @@ -0,0 +1,26 @@ +# Run for example as: +# echo ' 5/2 +# 2/5 +# 3/5' | awk -f fraction-tree.awk +function parent() +{ + if (a < b) { + b = b - a + } else { + a = a - b + } +} +BEGIN { + a = 0 + b = 0 + FS = "/" +} +{ + a = $1 + b = $2 + printf "Node = %d/%d: ", a, b + parent() + printf "Parent = %d/%d; ", a, b + parent() + printf "Grand-parent = %d/%d\n", a, b +} diff --git a/challenge-146/laurent-rosenfeld/c/ch-2.c b/challenge-146/laurent-rosenfeld/c/ch-2.c new file mode 100644 index 0000000000..e36e91bc3b --- /dev/null +++ b/challenge-146/laurent-rosenfeld/c/ch-2.c @@ -0,0 +1,21 @@ +#include <STDIO> +void parent(int *a, int *b) { + if (*a < *b) { + *b -= *a; + } else { + *a -= *b; + } +} + +int main (void) { + int num, denom; + + while (scanf ("%d/%d", &num, &denom) == 2) { + printf("%d/%d - ", num, denom); + parent(&num, &denom); + printf("Parent: %d/%d - ", num, denom); + parent(&num, &denom); + printf("Grand-parent: %d/%d \n", num, denom); + } + return (0); +} diff --git a/challenge-146/laurent-rosenfeld/julia/ch-1.jl b/challenge-146/laurent-rosenfeld/julia/ch-1.jl new file mode 100644 index 0000000000..62091968d1 --- /dev/null +++ b/challenge-146/laurent-rosenfeld/julia/ch-1.jl @@ -0,0 +1,24 @@ +function getprimes(max) + primes = [2, 3, 5] + count = 3 + candidate = 5 + while (count <= max) + candidate += 2 + not_prime = false + sq_cand = sqrt(candidate) + for i in primes + if (candidate % i == 0) + not_prime = true + break + end + i > max && break + end + not_prime && continue + push!(primes, candidate) + count += 1 + end + return primes[max] # Julia arrays start with index 1 +end + +p = getprimes(10001) +println(p) diff --git a/challenge-146/laurent-rosenfeld/kotlin/ch-2.kt b/challenge-146/laurent-rosenfeld/kotlin/ch-2.kt new file mode 100644 index 0000000000..4b7736b070 --- /dev/null +++ b/challenge-146/laurent-rosenfeld/kotlin/ch-2.kt @@ -0,0 +1,19 @@ +fun find_parent(pair: IntArray): IntArray { + val num = pair[0] + val denom = pair[1] + return if (num < denom) intArrayOf(num, denom - num) else intArrayOf(num - denom, denom) +} + +fun n2str (pair: IntArray): String { + return "${pair[0]}/${pair[1]}" +} + +fun main() { +val tests = arrayOf(intArrayOf(5,2), intArrayOf(2,5), intArrayOf(3,4)) + for (test in tests) { + val parent = find_parent(test) + val gd_parent = find_parent(parent) + print(n2str(test) + " - Parent: " + n2str(parent)) + println(" - Grand-parent: " + n2str(gd_parent)) + } +} diff --git a/challenge-146/laurent-rosenfeld/lua/ch-2.lua b/challenge-146/laurent-rosenfeld/lua/ch-2.lua new file mode 100644 index 0000000000..bb1e3c546c --- /dev/null +++ b/challenge-146/laurent-rosenfeld/lua/ch-2.lua @@ -0,0 +1,22 @@ +-- For a node `x/y` with a fraction less than 1, the parent is `x/(y-x)`; +-- For a node `x/y` with a fraction larger than 1, the parent is `(x-y)/x`. + +local function get_parent(pair) + num = pair[1] + denom = pair[2] + -- no ternary operator in Lua, we can simulate it with and / or: + return num < denom and {num, denom - num} or {num - denom, denom} +end + +local function to_str(pair) + -- return pair[1] .. "/" .. pair[2] + return table.concat(pair, "/") +end + +local tests = { {5, 2}, {2, 5}, {3, 4}, {3,5} } +for _, test in pairs(tests) do + parent = get_parent(test) + gd_parent = get_parent(parent) + print("Node " .. to_str(test) .. " - Parent: " .. to_str(parent) + .. " - Grand-Parent: " .. to_str(gd_parent)) +end diff --git a/challenge-146/laurent-rosenfeld/ruby/ch-2.rb b/challenge-146/laurent-rosenfeld/ruby/ch-2.rb new file mode 100644 index 0000000000..4a6b896394 --- /dev/null +++ b/challenge-146/laurent-rosenfeld/ruby/ch-2.rb @@ -0,0 +1,15 @@ +# For a node `x/y` with a fraction less than 1, the parent is `x/(y-x)`; +# For a node `x/y` with a fraction larger than 1, the parent is `(x-y)/x`. + +def get_parent (pair) + num = pair[0] + denom = pair[1] + return num < denom ? [num, denom - num] : [num - denom, denom]; +end + +tests = [ [5, 2], [2, 5], [3, 4], [3,5] ] +for test in tests + parent = get_parent(test) + gd_parent = get_parent(parent) + print("Node #{test} - Parent: #{parent} - Grand-Parent: #{gd_parent}\n") +end diff --git a/challenge-146/laurent-rosenfeld/scala/ch-2.scala b/challenge-146/laurent-rosenfeld/scala/ch-2.scala new file mode 100644 index 0000000000..712b686830 --- /dev/null +++ b/challenge-146/laurent-rosenfeld/scala/ch-2.scala @@ -0,0 +1,18 @@ +object fraction_tree extends App { + + def findParent(pair: List[Int]): List[Int] = { + val num = pair(0) + val denom = pair(1) + return if (num < denom) List(num, denom - num) else List(num - denom, denom) + } + def n2str(pair: List[Int]): String = { + return s"${pair(0)}" + "/" + s"${pair(1)}" + } + + val tests: List[List[Int]] = List(List(5, 2), List(2, 5), List(3, 4)) + for (test <- tests) { + val parent = findParent(test) + val gd_parent = findParent(parent) + println(n2str(test) + " - Parent: " + n2str(parent) + " - Grand-parent: " + n2str(gd_parent)) + } +} |
