diff options
| author | Abigail <abigail@abigail.be> | 2021-10-26 19:34:03 +0200 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-10-26 19:34:03 +0200 |
| commit | 7bf4f5be8abe72306ce59ebbd52a8686f2d119e6 (patch) | |
| tree | b96cc9b95cc0412a1a6dc9c91dd82901e7994e23 | |
| parent | 0b59fc36f4c1f832e41978cbab29475af95ffb10 (diff) | |
| download | perlweeklychallenge-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.md | 2 | ||||
| -rw-r--r-- | challenge-136/abigail/r/ch-1.r | 53 | ||||
| -rw-r--r-- | challenge-136/abigail/r/ch-2.r | 29 |
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") +} |
