aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.freedom.nl>2022-01-23 14:32:20 +0100
committerAbigail <abigail@abigail.freedom.nl>2022-01-23 14:32:20 +0100
commit13af2d474b88031642215c3bbb35585c8f7020d7 (patch)
tree3add54027b4f234ef2a6b6d5dd68dd1186663847
parenteaba548a0b2e083112048955222a190a382b7a12 (diff)
downloadperlweeklychallenge-club-13af2d474b88031642215c3bbb35585c8f7020d7.tar.gz
perlweeklychallenge-club-13af2d474b88031642215c3bbb35585c8f7020d7.tar.bz2
perlweeklychallenge-club-13af2d474b88031642215c3bbb35585c8f7020d7.zip
Week 148, part 2: R solution
-rw-r--r--challenge-148/abigail/r/ch-2.r95
1 files changed, 95 insertions, 0 deletions
diff --git a/challenge-148/abigail/r/ch-2.r b/challenge-148/abigail/r/ch-2.r
new file mode 100644
index 0000000000..6fe97a5511
--- /dev/null
+++ b/challenge-148/abigail/r/ch-2.r
@@ -0,0 +1,95 @@
+#!/usr/local/bin/Rscript
+
+#
+# See https://theweeklychallenge.org/blog/perl-weekly-challenge-148
+#
+
+#
+# Run as: Rscript ch-2.r
+#
+
+COUNT <- 5
+A <- 1
+B <- 2
+C <- 3
+SUM <- 4
+out <- list ()
+for (i in 1 : COUNT) {
+ out [[i]] = c (999999, 999999, 999999, 3 * 999999)
+}
+
+max_index <- 1
+k <- 0
+
+while (3 * k + 2 < out [[max_index]] [[SUM]]) {
+ a <- 3 * k + 2
+ f1 <- k + 1
+ f2 <- 8 * k + 5
+
+ d1 <- c ()
+ for (i in 1 : f1) {
+ if (i * i > f1) {
+ break
+ }
+ if (f1 %% i == 0) {
+ d1 <- c (d1, i)
+ if (i != f1 / i) {
+ d1 <- c (d1, f1 / i)
+ }
+ }
+ }
+
+
+ d2 <- c ()
+ for (i in 1 : f2) {
+ if (i * i > f2) {
+ break
+ }
+ if (f2 %% i == 0) {
+ s1 <- floor (sqrt (i))
+ s2 <- floor (sqrt (f2 / i))
+ if (s1 * s1 == i) {
+ d2 <- c (d2, s1)
+ }
+ if (s2 * s2 == f2 / i && s1 != s2) {
+ d2 <- c (d2, s2)
+ }
+ }
+ }
+
+ for (d1v in d1) {
+ for (d2v in d2) {
+ b <- d1v * d2v
+ c <- f1 * f1 * f2 / (b * b)
+ if (a + b + c < out [[max_index]] [[SUM]]) {
+ seen <- FALSE
+ for (i in 1 : COUNT) {
+ if (out [[i]] [[A]] == a && out [[i]] [[B]] == b) {
+ seen <- TRUE
+ }
+ }
+ if (seen) {
+ break
+ }
+
+ out [[max_index]] = c (a, b, c, a + b + c)
+
+ max_index <- 1
+ max_sum <- out [[max_index]] [[SUM]]
+
+ for (i in 2 : COUNT) {
+ if (max_sum < out [[i]] [[SUM]]) {
+ max_sum <- out [[i]] [[SUM]]
+ max_index <- i
+ }
+ }
+ }
+ }
+ }
+
+ k <- k + 1
+}
+
+for (i in 1 : COUNT) {
+ cat (out [[i]] [[A]], out [[i]] [[B]], out [[i]] [[C]], "\n")
+}