Ver Fonte

Adding day 4 - WIP

bodicsek há 4 anos atrás
pai
commit
c133917684
2 ficheiros alterados com 70 adições e 0 exclusões
  1. 44 0
      day04/day04.ts
  2. 26 0
      day04/input.test.ts

+ 44 - 0
day04/day04.ts

@@ -0,0 +1,44 @@
+import * as O from "fp-ts/Option";
+
+import { findFirst, map, reduce } from "fp-ts/lib/Array";
+import { pipe } from "fp-ts/lib/function";
+
+import { draws as testDraws, RawTable, tables as testTables } from "./input.test";
+
+type Value = {
+  value: number,
+  marked: boolean
+};
+
+type Table = {
+  lastMarked?: number,
+  table: Value[][]
+}
+
+const calc = (draws: number[]) => (table: Table) => pipe(
+  draws,
+  reduce(table, (t, d) => pipe(
+    [...t.table],
+    map(findFirst((v: Value) => v.value === d)),
+    reduce(O.none as O.Option<Value>, (v, o) => pipe(o, O.alt(() => v))),
+    O.fold<Value, Table>(
+      () => t,
+      v => {
+        v.marked = true;
+        return {
+          lastMarked: d,
+          table: t.table
+        };
+      }
+    )))
+);
+
+const results = pipe(
+  testTables,
+  map<RawTable, Table>(t => ({
+    table: pipe(t, map(r => pipe(r, map<number, Value>(v => ({ value: v, marked: false })))))
+  })),
+  map(calc(testDraws))
+);
+
+console.log("results: ", results[0]);

+ 26 - 0
day04/input.test.ts

@@ -0,0 +1,26 @@
+export const draws = [7, 4, 9, 5, 11, 17, 23, 2, 0, 14, 21, 24, 10, 16, 13, 6, 15, 25, 12, 22, 18, 20, 8, 19, 3, 26, 1];
+
+export type RawTable = number[][];
+export const tables: RawTable[] = [
+  [
+    [22, 13, 17, 11, 0],
+    [8, 2, 23, 4, 24],
+    [21, 9, 14, 16, 7],
+    [6, 10, 3, 18, 5],
+    [1, 12, 20, 15, 19]
+  ],
+  [
+    [3, 15, 0, 2, 22],
+    [9, 18, 13, 17, 5],
+    [19, 8, 7, 25, 23],
+    [20, 11, 10, 24, 4],
+    [14, 21, 16, 12, 6]
+  ],
+  [
+    [14, 21, 17, 24, 4],
+    [10, 16, 15, 9, 19],
+    [18, 8, 23, 26, 20],
+    [22, 11, 13, 6, 5],
+    [2, 0, 12, 3, 7]
+  ]
+];