aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-10-26 19:34:03 +0200
committerAbigail <abigail@abigail.be>2021-10-26 19:34:03 +0200
commit7bf4f5be8abe72306ce59ebbd52a8686f2d119e6 (patch)
treeb96cc9b95cc0412a1a6dc9c91dd82901e7994e23
parent0b59fc36f4c1f832e41978cbab29475af95ffb10 (diff)
downloadperlweeklychallenge-club-7bf4f5be8abe72306ce59ebbd52a8686f2d119e6.tar.gz
perlweeklychallenge-club-7bf4f5be8abe72306ce59ebbd52a8686f2d119e6.tar.bz2
perlweeklychallenge-club-7bf4f5be8abe72306ce59ebbd52a8686f2d119e6.zip
R solutions for week 136
-rw-r--r--challenge-136/abigail/README.md2
-rw-r--r--challenge-136/abigail/r/ch-1.r53
-rw-r--r--challenge-136/abigail/r/ch-2.r29
3 files changed, 84 insertions, 0 deletions
diff --git a/challenge-136/abigail/README.md b/challenge-136/abigail/README.md
index ea2555503a..df95d28447 100644
--- a/challenge-136/abigail/README.md
+++ b/challenge-136/abigail/README.md
@@ -12,6 +12,7 @@
* [Node.js](node/ch-1.js)
* [Perl](perl/ch-1.pl)
* [Python](python/ch-1.py)
+* [R](r/ch-1.r)
* [Ruby](ruby/ch-1.rb)
* [Tcl](tcl/ch-1.tcl)
* [Scheme](scheme/ch-1.scm)
@@ -28,6 +29,7 @@
* [Node.js](node/ch-2.js)
* [Perl](perl/ch-2.pl)
* [Python](python/ch-2.py)
+* [R](r/ch-2.r)
* [Ruby](ruby/ch-2.rb)
* [Tcl](tcl/ch-2.tcl)
* [Scheme](scheme/ch-2.scm)
diff --git a/challenge-136/abigail/r/ch-1.r b/challenge-136/abigail/r/ch-1.r
new file mode 100644
index 0000000000..1231a1c2a8
--- /dev/null
+++ b/challenge-136/abigail/r/ch-1.r
@@ -0,0 +1,53 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: Rscript ch-1.r < input-file
+#
+
+gcd <- function (u, v) {
+ u_odd <- u %% 2 != 0
+ v_odd <- v %% 2 != 0
+
+ if (u == v | v == 0) {u}
+ else if ( u == 0) {v}
+ else if (!u_odd & !v_odd) {
+ bitwShiftL (gcd (bitwShiftR (u, 1), bitwShiftR (v, 1)), 1)}
+ else if (!u_odd & v_odd) {gcd (bitwShiftR (u, 1), v)}
+ else if ( u_odd & !v_odd) {gcd (u, bitwShiftR (v, 1))}
+ else if ( u > v) {gcd (u - v, v)}
+ else {gcd (v - u, u)}
+}
+
+is_power_of_n <- function (number, n) {
+ if (number < 1) {FALSE}
+ else if (number == 1) {TRUE}
+ else if (number %% n != 0) {FALSE}
+ else {is_power_of_n (number / n, n)}
+}
+
+is_power_of_2 <- function (number) {
+ is_power_of_n (number, 2)
+}
+
+stdin <- file ('stdin', 'r')
+repeat {
+ line <- readLines (stdin, n = 1)
+ if (length (line) == 0) {
+ break
+ }
+ parts <- strsplit (line, " ")
+
+ m <- as.numeric (parts [[1]] [[1]])
+ n <- as.numeric (parts [[1]] [[2]])
+
+ r <- gcd (n, m)
+
+ if (r > 1 & is_power_of_2 (r)) {
+ cat ("1\n")
+ }
+ else {
+ cat ("0\n")
+ }
+}
diff --git a/challenge-136/abigail/r/ch-2.r b/challenge-136/abigail/r/ch-2.r
new file mode 100644
index 0000000000..452d060524
--- /dev/null
+++ b/challenge-136/abigail/r/ch-2.r
@@ -0,0 +1,29 @@
+#
+# See ../README.md
+#
+
+#
+# Run as: Rscript ch-2.r < input-file
+#
+
+count <- function (target, this_fib = 1, prev_fib = 1) {
+ if (target < this_fib) {
+ 0
+ } else if (target == this_fib) {
+ 1
+ } else {
+ count (target - this_fib, this_fib + prev_fib, this_fib) +
+ count (target, this_fib + prev_fib, this_fib)
+ }
+}
+
+
+
+stdin <- file ('stdin', 'r')
+repeat {
+ n <- readLines (stdin, n = 1)
+ if (length (n) == 0) {
+ break
+ }
+ cat (count (as.integer (n)), "\n")
+}