aboutsummaryrefslogtreecommitdiff
path: root/challenge-146
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-01-09 22:58:03 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-01-09 22:58:03 +0000
commit53aa89533816a39ca9d108e0198bfa79f9bb2fe8 (patch)
tree346664b4b0b550ff2099479c052036c2b6301800 /challenge-146
parent29494c5072ffe550c5a4de99332403e46775550e (diff)
downloadperlweeklychallenge-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.awk26
-rw-r--r--challenge-146/laurent-rosenfeld/c/ch-2.c21
-rw-r--r--challenge-146/laurent-rosenfeld/julia/ch-1.jl24
-rw-r--r--challenge-146/laurent-rosenfeld/kotlin/ch-2.kt19
-rw-r--r--challenge-146/laurent-rosenfeld/lua/ch-2.lua22
-rw-r--r--challenge-146/laurent-rosenfeld/ruby/ch-2.rb15
-rw-r--r--challenge-146/laurent-rosenfeld/scala/ch-2.scala18
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))
+ }
+}