diff options
| author | Abigail <abigail@abigail.freedom.nl> | 2022-01-23 14:32:20 +0100 |
|---|---|---|
| committer | Abigail <abigail@abigail.freedom.nl> | 2022-01-23 14:32:20 +0100 |
| commit | 13af2d474b88031642215c3bbb35585c8f7020d7 (patch) | |
| tree | 3add54027b4f234ef2a6b6d5dd68dd1186663847 | |
| parent | eaba548a0b2e083112048955222a190a382b7a12 (diff) | |
| download | perlweeklychallenge-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.r | 95 |
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") +} |
