From 98bc105f521ec63ab582a32bf8146a0d380f3ec8 Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Fri, 10 Mar 2023 00:04:49 +1100 Subject: [PATCH] p26 --- inputs/passing/projEuler/p26.ts | 53 +++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 inputs/passing/projEuler/p26.ts diff --git a/inputs/passing/projEuler/p26.ts b/inputs/passing/projEuler/p26.ts new file mode 100644 index 0000000..71c65d4 --- /dev/null +++ b/inputs/passing/projEuler/p26.ts @@ -0,0 +1,53 @@ +export default function () { + let longestCycle = 0; + let longestCycleN = 0; + + for (let n = 2; n < 1_000; n++) { + const cycleLen = reciprocalDigitsData(n).cycle.length; + + if (cycleLen > longestCycle) { + longestCycle = cycleLen; + longestCycleN = n; + } + } + + return longestCycleN; +} + +function reciprocalDigitsData(n: number) { + let digits: number[] = []; + + let rems: number[] = [10]; + let rem = 10; + + while (true) { + const digit = Math.floor(rem / n); + rem -= digit * n; + rem *= 10; + digits.push(digit); + + if (rems.includes(rem)) { + break; + } + + rems.push(rem); + } + + let head = ""; + + const cycleRem = rem; + rem = 10; + + while (rem !== cycleRem) { + const digit = Math.floor(rem / n); + rem -= digit * n; + rem *= 10; + + head += digits.shift(); + } + + return { + head, + cycle: digits.join(""), + }; +}