aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.freedom.nl>2022-01-05 21:01:57 +0100
committerAbigail <abigail@abigail.freedom.nl>2022-01-05 21:02:25 +0100
commitbbc66927a06a44a3e4c4223ef4d159b597734a5b (patch)
tree6f4cc0d3aafd152db0c2d6e2ca28cb38b6aa3990
parentada8b466f3fe8efcf3b85f22495c744517df42ca (diff)
downloadperlweeklychallenge-club-bbc66927a06a44a3e4c4223ef4d159b597734a5b.tar.gz
perlweeklychallenge-club-bbc66927a06a44a3e4c4223ef4d159b597734a5b.tar.bz2
perlweeklychallenge-club-bbc66927a06a44a3e4c4223ef4d159b597734a5b.zip
Week 3, part 1: different algorithm for bc solution.
-rw-r--r--challenge-003/abigail/bc/ch-1.bc39
-rw-r--r--challenge-003/abigail/t/ctest.ini3
2 files changed, 36 insertions, 6 deletions
diff --git a/challenge-003/abigail/bc/ch-1.bc b/challenge-003/abigail/bc/ch-1.bc
index d3336b509d..bbbbdf3a2e 100644
--- a/challenge-003/abigail/bc/ch-1.bc
+++ b/challenge-003/abigail/bc/ch-1.bc
@@ -1,8 +1,35 @@
-max = read ()
-for (base2 = 1; base2 <= max; base2 *= 2) {
- for (base3 = base2; base3 <= max; base3 *= 3) {
- for (base5 = base3; base5 <= max; base5 *= 5) {
- base5
- }
+#!/usr/bin/bc
+
+#
+# See https://theweeklychallenge.org/blog/perl-weekly-challenge-003
+#
+
+#
+# Run as: bc ch-1.bc < input-file
+#
+
+while (1) {
+ n = read ()
+ if (n == 0) {
+ break
}
+ ugly [0] = 1
+ next_2 = 0
+ next_3 = 0
+ next_5 = 0
+ index = 1
+ while (index < n) {
+ u2 = 2 * ugly [next_2]
+ u3 = 3 * ugly [next_3]
+ u5 = 5 * ugly [next_5]
+ if ((u2 <= u3) && (u2 <= u5)) {min = u2}
+ if ((u3 <= u2) && (u3 <= u5)) {min = u3}
+ if ((u5 <= u2) && (u5 <= u3)) {min = u5}
+ ugly [index] = min
+ if (2 * ugly [next_2] <= ugly [index]) {next_2 = next_2 + 1}
+ if (3 * ugly [next_3] <= ugly [index]) {next_3 = next_3 + 1}
+ if (5 * ugly [next_5] <= ugly [index]) {next_5 = next_5 + 1}
+ index = index + 1
+ }
+ ugly [index - 1]
}
diff --git a/challenge-003/abigail/t/ctest.ini b/challenge-003/abigail/t/ctest.ini
index a3434f63d2..71b4641536 100644
--- a/challenge-003/abigail/t/ctest.ini
+++ b/challenge-003/abigail/t/ctest.ini
@@ -8,3 +8,6 @@
1-2 = Larger Numbers
2-1 = Minimal triangle
2-2 = 15 row triangle
+
+[1-1,1-2/bc]
+add_to_input = 0