bodicsek 4 gadi atpakaļ
vecāks
revīzija
22b40fad30
3 mainītis faili ar 43 papildinājumiem un 0 dzēšanām
  1. 41 0
      day06/day06.ts
  2. 1 0
      day06/input.test.ts
  3. 1 0
      day06/input.ts

+ 41 - 0
day06/day06.ts

@@ -0,0 +1,41 @@
+import * as A from "fp-ts/Array";
+import * as N from "fp-ts/number";
+
+import { pipe } from "fp-ts/lib/function";
+import { concatAll } from "fp-ts/lib/Monoid";
+
+import { ages as testAges } from "./input.test";
+import { ages as inputAges } from "./input";
+
+type Generations = number[];
+const GEN_CYCLES = 9;
+const GEN_RESTART_CYCLE = 6;
+const DAYS = 256;
+
+const parseAges = (input: string): Generations => pipe(
+    input.split(","),
+    A.map(parseInt),
+    A.reduce(A.replicate(GEN_CYCLES, 0) as Generations, (gens, age) => A.unsafeUpdateAt(age, gens[age] + 1, gens))
+);
+
+const generations = parseAges(
+    // testAges
+    inputAges
+);
+
+const simulateDay = (gens: Generations): Generations => pipe(
+    gens,
+    A.rotate(-1),
+    A.splitAt(GEN_RESTART_CYCLE),
+    A.reduceWithIndex([] as Generations, (i, gens, part) => i == 0 ? part : A.concat(A.unsafeUpdateAt(0, part[0] + part[2], part))(gens))
+);
+
+const simulate = (generations: Generations, days: number): Generations => {
+    if (days === 0) {
+        return generations;
+    }
+    return simulate(simulateDay(generations), days - 1);
+}
+
+const entities = concatAll(N.MonoidSum)(simulate(generations, DAYS));
+console.log(entities);

+ 1 - 0
day06/input.test.ts

@@ -0,0 +1 @@
+export const ages = `3,4,3,1,2`;

+ 1 - 0
day06/input.ts

@@ -0,0 +1 @@
+export const ages = `5,1,5,3,2,2,3,1,1,4,2,4,1,2,1,4,1,1,5,3,5,1,5,3,1,2,4,4,1,1,3,1,1,3,1,1,5,1,5,4,5,4,5,1,3,2,4,3,5,3,5,4,3,1,4,3,1,1,1,4,5,1,1,1,2,1,2,1,1,4,1,4,1,1,3,3,2,2,4,2,1,1,5,3,1,3,1,1,4,3,3,3,1,5,2,3,1,3,1,5,2,2,1,2,1,1,1,3,4,1,1,1,5,4,1,1,1,4,4,2,1,5,4,3,1,2,5,1,1,1,1,2,1,5,5,1,1,1,1,3,1,4,1,3,1,5,1,1,1,5,5,1,4,5,4,5,4,3,3,1,3,1,1,5,5,5,5,1,2,5,4,1,1,1,2,2,1,3,1,1,2,4,2,2,2,1,1,2,2,1,5,2,1,1,2,1,3,1,3,2,2,4,3,1,2,4,5,2,1,4,5,4,2,1,1,1,5,4,1,1,4,1,4,3,1,2,5,2,4,1,1,5,1,5,4,1,1,4,1,1,5,5,1,5,4,2,5,2,5,4,1,1,4,1,2,4,1,2,2,2,1,1,1,5,5,1,2,5,1,3,4,1,1,1,1,5,3,4,1,1,2,1,1,3,5,5,2,3,5,1,1,1,5,4,3,4,2,2,1,3`;