aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--day5/index.ts59
-rw-r--r--day5/input.txt761
-rw-r--r--day5/input_test.txt1
3 files changed, 821 insertions, 0 deletions
diff --git a/day5/index.ts b/day5/index.ts
new file mode 100644
index 0000000..1cf4a3c
--- /dev/null
+++ b/day5/index.ts
@@ -0,0 +1,59 @@
+import { Observable, of } from "rxjs";
+import { concatAll, count, filter, groupBy, map, max, mergeMap, reduce, tap } from 'rxjs/operators';
+import { ExerciseModuleFunc } from "../types";
+
+type Pair = [number, number];
+
+const getColumnAndRow = (line: string): Pair => {
+ const chars = line.split("");
+ let lo: number, hi: number;
+
+ lo = 0; hi = 127;
+ for (let i = 0; i < 7; i += 1) {
+ console.log("i:",i,"lo:",lo,"hi:",hi);
+
+ const chr = chars[i];
+ const diff = hi - lo;
+ if (chr === "F") {
+ hi = Math.floor(hi - diff / 2);
+ }
+ else if (chr === "B") {
+ lo = Math.ceil(lo + diff / 2);
+ }
+ }
+
+ const row = hi;
+
+ lo = 0; hi = 7;
+ for (let i = 0; i < 3; i += 1) {
+ console.log("i:",i,"lo:",lo,"hi:",hi);
+
+ const chr = chars[i + 7];
+ const diff = hi - lo;
+ if (chr === "L") {
+ hi = Math.floor(hi - diff / 2);
+ }
+ else if (chr === "R") {
+ lo = Math.ceil(lo + diff / 2);
+ }
+ }
+
+ const col = hi;
+ return [col, row];
+}
+
+const calcID = (pair: Pair) => pair[1] * 8 + pair[0];
+
+const day5: ExerciseModuleFunc = async (input: string) => {
+ const prom1 = of(input).pipe(
+ map(l => l.split("\n")),
+ concatAll(),
+ map(getColumnAndRow),
+ map(calcID),
+ max()
+ ).toPromise();
+
+ return Promise.all([prom1]);
+}
+
+export default day5;
diff --git a/day5/input.txt b/day5/input.txt
new file mode 100644
index 0000000..729788e
--- /dev/null
+++ b/day5/input.txt
@@ -0,0 +1,761 @@
+BBFFFBBLLR
+BBFFFFFLRL
+BFBFFFBLRR
+FBBFFFFRLL
+FFBFFFBLRR
+BFBBBFFLLL
+BFBBBFFLRR
+FBBFBBFRLL
+BFFBFBBLLL
+BFBFBBFRRR
+FBFBFFBLLR
+FFFBBBFRLL
+BFBBFBBRRR
+FBFFBFBRRR
+BFFBFFFLLL
+FBBBFBFLRR
+BFBBFBFRLR
+BFFFFFBRRL
+BFFBFFFRLR
+FBBBBBFRLL
+BFBBFBBLRL
+BFFFBFBRLR
+FBBBBFBLLR
+BBFFFBFRRR
+BFFBBBFLRL
+BFBFBFFLLR
+FFFBBBFLLR
+BFBFFFFRRL
+FFFBBFBLLR
+FBFFFBFLRL
+FBBBFBBRLL
+FBBFBFFLLR
+FBFBBFFLLL
+FBBFFFFLLL
+BFBFFBFRRL
+FFBBBFBRLL
+BFFBBFFLLR
+BFBBBBBRLR
+BFFBFFFRLL
+FBBBBFFRRR
+FFBBBFFRRL
+BBFBFBBLRR
+BBFFFFFLLR
+FFBFBFBLRR
+FBBBBFFLLR
+BBFBFBBRLR
+FFBFFBFRLR
+BFBBFFFLRL
+FFBFBFFLLR
+FFBFBBFRRR
+BBFFFBFLLL
+BFFFBBFRLL
+FFBFBBFLRR
+FBBBFFFRLL
+FBBFBFBRLR
+BFFFFFBRLR
+BFBFBFBLRL
+FBBBBFBLRL
+BBFFFFBLRR
+FBBBFFFRRR
+FFBBFFBLRL
+FBFBFFFRRL
+FFBFBBFLLL
+BBFFFBBRLR
+FBFBFFBRRR
+BBFFBBFRLR
+BFBBBFBLLR
+BFFBFBBLLR
+FBBBFBBLRR
+FFBFBBFLRL
+BFBFFBBRLR
+BFBBBFFLRL
+BFFFFBBRLR
+BFBBBFBRRL
+BFBFBBBRRR
+FFBFFBBLRR
+FBFBBBBRRL
+FFBFFFBRLL
+FBFFFFBLLL
+FFBBBFBLRR
+BBFFBBFLLL
+BFFBFBBLRR
+FBBBFBBRRL
+FFBFFBFRRR
+BFBBFFBRLL
+FBFFBBBLRR
+FFBFFBFLLL
+FBFBFBFRRL
+BBFFFFFLRR
+FFBBFBFRLL
+BFBBFFFRLL
+FBBBBFFLLL
+BFFBFBBRRL
+FBFBBBFLRR
+FBBBBFFLRR
+FBFFBBFLLL
+BFFFBBFRRL
+BFBBBFBRLL
+BFBFBBFRLL
+FBFFFFBRLL
+BBFBFBBLLL
+FFBBBFBLLR
+BBFFBBBLLR
+FBBBBBBRRR
+BBFFBFFRLL
+FBBFFBBRRL
+FFBBBBFRRR
+FBFBBFBRRL
+BFFFBFFRLL
+BFBFBFFRLL
+FBFBFFBLRR
+BFBBFFFRRR
+BFBBBBBLLL
+BFBBFFFRLR
+FFBFBFBRLL
+FBFFBFBRRL
+FFFBBBFRLR
+BBFFFBFLLR
+FBFBBBBRLR
+FBFBBFFLRL
+FBBBBFBLRR
+FBFBBBBLLL
+BFBBFBBLRR
+FFBBFBFLRL
+FFBFBBFRLL
+BFFFBFBLRR
+FFBFFBBRRR
+FBFFFFFRLL
+BFFFBFFRRR
+BFFBBFBRLR
+BFBFBBBLLL
+BFFBBFBLLR
+BFFBBBFLLL
+BFFFBFFLRL
+FBBFBFFLLL
+FBBBBBFLRR
+FBFBFBBRRR
+BFBBBBFLLR
+FBFFBFBLLR
+BBFFBBBLLL
+BBFFBBBRLR
+FFBBBFFRRR
+BBFFFBFLRR
+FFFBBBBRRR
+FFBFBFBRRR
+FFFBBFFRLL
+FBFFBBFRLR
+BFFBBBBRRR
+FBFBFFBLLL
+BBFBFFBLRL
+FFBFFBFLLR
+BFFFBBBLRL
+FBFFBFFLRR
+FBFFBBBLLR
+FBBFBFFLRR
+BFFBFFFRRL
+FBBFBBBLLL
+BBFBFBFRRL
+FBFFFFBRLR
+BFBFBFBLRR
+BFFBFBBRLL
+BFBFBBFLRL
+FBBBBFFRLR
+BFFFBBFLLL
+BFBBBFBLLL
+FFBBBBFRRL
+FFBFFFFLLR
+FBFBFFBRLL
+BBFBFBFLRL
+FBBBBBBRLR
+BFBFFFBLLR
+BBFFBBFLRR
+BBFFBBBRRR
+FBFFFBFRLR
+FFBBFFBLLL
+BFFBFBFLLL
+FBFFFFFLRL
+BFFBBFFLRL
+FBBBBBBRRL
+BFFBFBBRLR
+FBFBFBFLLL
+BFFBFFFRRR
+BBFFFFBRRR
+BFFBBFFRRR
+FBBFBBBLRL
+FFBBFBBRLL
+FBFFBBFRLL
+BFBFFBBRRL
+FBBFFFBLRL
+BFBBFFBLRR
+BBFFBFBRLR
+FBFBFFBRLR
+BBFFBFBRRL
+FFBBFBBRLR
+BFBFBFFLRR
+BFFBFFFLRL
+FFBBBFBRRL
+FFBFFBBLRL
+FBBFBBBRLR
+FFFBBBBRLR
+FBBFFFBLLR
+FFBFBBBRRR
+FFBBBFBRRR
+BFFBFBFRLL
+BFBBBBFLLL
+BFBFFFFRLL
+FBBBBBFRLR
+BFFBFBFLRL
+FBFFBFFRRL
+BBFFBFFRRL
+BFFBFBBRRR
+FBFFFBBRRR
+FFBBFBFRRR
+BFBBBFBLRL
+FFBBBFFLLL
+BFFFBBBRRR
+BFFBBBBRLL
+BFBBBBBLRL
+FBFFFBBLLL
+FBFBBBFLLL
+FFBBBFFRLR
+FFBFFFFRLR
+FFBFFBFRLL
+BFBFBFFRRL
+BFBFFBBRRR
+FFFBBFFRRR
+BFFFBFBLLR
+FBFBFBFLRR
+BFBFFFFLLL
+FBBBFBBLLL
+FBBFBBFRLR
+FFBFBFFLRL
+FBFFBFFLLR
+BFBFBFBLLR
+FBBFFFFRLR
+FBFBFFBLRL
+BFFFBFFLLR
+BFBFBFBLLL
+BFBBFBFLRR
+BFFBBFFRLL
+BFFFBBFRRR
+BFBFFBBLLR
+FBBFBBBLRR
+FFBFFFBLRL
+BFFFBBBRLR
+BBFBFFBLLR
+BBFBFBFRLL
+FFFBBFBRRL
+BFFFFBBLRR
+BBFFFFFRRR
+BFBBFBBRRL
+BFFFFFFRLL
+BFFFFFFLLL
+FBFFBBBRLR
+BBFBFFBRRL
+BFFFBBFLRR
+FBBFBFBLLR
+FFBBBBBLLR
+FBFBBFFRLL
+BFBBFFFRRL
+FFBBBFBRLR
+FBBBFFFLRR
+FFBBBFFRLL
+FFBBBBBRLL
+BFFFBBBLLR
+FBBFFFFLLR
+BBFBFFBLRR
+FFBFBBFRRL
+BBFBFBBLRL
+BFBBBFBRRR
+FFBFFBBRLL
+FFBFBFFRRR
+FBFBBFBLRL
+BBFFFBBRRR
+BFFBBBBLRR
+BFBFBBFRLR
+FBBBBFBRRR
+FFBBFFBLRR
+FFFBBBFLLL
+BBFBFFFLLR
+FFBFFBFRRL
+BBFFFBFLRL
+BFBFFFFRRR
+BFFFFFFRRL
+FFBFFFFLRR
+BFBBBFBLRR
+FFFBBBBLLR
+BFFBBFFRLR
+BBFFFBFRLR
+BFFBFFBRLR
+FFBBFFFLLR
+FFBBFBFRRL
+FBFBBBBLRL
+FBBBFFBLLL
+FBBBBBBLRR
+FFBBFBBLRR
+FBBFBBFRRL
+FBBFFFFLRR
+FFBBFFBRLR
+FBFFFFBLRL
+FBFFBFFRLR
+BFBFFBFRRR
+FFBFFFFRLL
+BFBFFBBLRL
+FBFFFBFRRR
+BFFBBBFRLR
+BFFBBFBRRL
+BFBBBBFLRR
+FFBFBBBRLL
+FBFBBBFRLL
+BFBFFFFLRR
+BBFBFFFLLL
+BFFBBBBLRL
+FFBFBFBLLR
+FBBFFFBRLL
+BFFFFFBLLR
+FBFBBFFRRR
+FBFFBBFLRR
+BFFFFFBLLL
+FBFFFFFRRL
+FFBBBFBLLL
+FBBFFFFLRL
+BBFBFFBRRR
+FBFFBFBRLR
+FBBBFBFLLR
+BFFBBBBRRL
+BFFFBBFLLR
+BFFBFFBRLL
+FFBFBBBLLR
+FFBFBFFRLR
+BFFBFFBLRR
+BFBBBFFRRL
+BFFBBFBLRL
+FBFBFBFLRL
+BBFBFBBRLL
+FBFFFFBRRL
+FFBBBBBRRR
+BFBFFFBRRR
+FFBFFBFLRL
+BFFBBBFLRR
+FBFBBFBRLL
+BFBBBFFRRR
+BFFBFFFLRR
+BFBFFFFRLR
+FBBBFBFLRL
+FFFBBBFRRR
+FBFBBFFRRL
+BFFFBBFLRL
+FBBBBFBRLR
+FBBFBBFLLR
+FBFBBBBLRR
+FFBBBBBRRL
+FFBBFFFLLL
+FFBBFBBLLR
+BBFFFBFRLL
+BBFBFBBLLR
+FBBFBFBLLL
+FBFFBBFRRR
+FBBBFBBRRR
+BFBFBBFLLL
+FBFBFBBRRL
+BFBBFBFLRL
+BFBBFBBLLL
+FBBFBFFRLL
+BBFFFBBLLL
+FFBBFFFLRL
+BFFBFFFLLR
+BFFBBFBRRR
+BFFBFFBLLL
+BBFFBFBLRR
+FBFBFBBLRR
+BBFBFBFRLR
+BFFFFBFLLL
+FBBFBFFRLR
+FBFBFBBRLL
+BFFFFFBLRL
+BFBBFBBLLR
+BBFFBFFLLR
+BBFFBFBLRL
+BBFFBBBLRR
+FBFFBFBLRL
+BFFBBFBRLL
+BFFBBFFLRR
+FBBFFBFRRL
+BBFBFFBLLL
+BFBFBBBLRL
+FFBFFFBLLR
+FBBBFBFRLR
+BFFFFBFRRR
+BFBFBFBRRR
+FBBBBBFLLR
+BBFFBBFRRL
+BBFFFFFRLR
+FBFBFBBLLL
+BFFFFBFLRR
+BFFBBBFLLR
+FBFBBFBRRR
+BFBFBFFRLR
+FBFBFBFRLR
+BFBBFBFRRL
+FFBBFFBLLR
+FBBBBBFRRL
+BFBFFFBRRL
+BBFFBBBLRL
+FBBBFFFLRL
+BFFFBBBRRL
+FBBFFBBLRL
+FFBBBBBRLR
+BFBFBBBRLR
+FBFBFBBRLR
+FFBBBBBLRL
+FFBBFBFLLR
+FBFBFBFLLR
+FBFBBBBRLL
+FBFFFFFLLL
+BFFBFBFLLR
+BFBBBBBRRL
+FBBBBFFRLL
+BFBFFFBLLL
+FBFFBFBLRR
+FBFBBFBLLR
+FBBFFBFLRR
+BBFFFBBRRL
+FBBBFFBRLR
+BFFBBFFLLL
+FBFBBFFLRR
+FFBBBBFRLR
+FFBBBFFLRL
+FFBBFFFRRL
+BBFBFFFRRL
+FBFBFFFRLL
+BFBBBBFLRL
+FBFFFBFLLR
+FBFFBBBRLL
+FBBBFBBRLR
+BFBBBBBLLR
+BFBBFFBLLL
+BFBBFFFLLR
+FBBFBFBLRR
+BFFFBFFRRL
+FFBFFFFRRR
+FBFBFBBLLR
+FFBBBBFLLL
+FBFFFBFRRL
+FBBBFFBRRR
+BFBBFFFLRR
+BBFFFFBRLR
+FBBBFBFRLL
+FFBFFFBRLR
+FBFFFFBRRR
+FFBFBFFLLL
+BBFBFFBRLR
+BFFBFBFRLR
+FBBBBFBRLL
+FBFBFFFRRR
+BBFFBFFLRL
+BFBFBBBLLR
+FBBBBFFRRL
+FBFBFBFRRR
+FFBFBFBRRL
+FBFBBFBLRR
+FBBBFFBLRL
+BBFFFBBLRL
+FFBBFBFLRR
+BFFFFFFLLR
+BFBBBBBRLL
+BFBFBFBRLL
+BFBBFBFLLR
+FBFFFFFLRR
+BFFFBBBRLL
+FBBBBBBRLL
+BFBFBBBRRL
+FBFFBFBRLL
+FFFBBBBLRL
+BFBFFFBRLR
+FFBBBBFRLL
+FFBBFFBRLL
+BFFFBFBLLL
+BFFBFFBLLR
+BBFFFFFRRL
+BBFFBBFRRR
+BFBFFBFRLR
+FBFFBFFRLL
+FBBFBBBRRR
+BFFFFBFRRL
+BFFBFFBRRL
+BBFBFFFLRR
+BFBFBBFLLR
+FFBFFBBLLL
+FBFBFFFLRL
+FBFBFFFLLR
+BFBFBBFRRL
+FFBFFFFLLL
+BFFBFBBLRL
+FBFFFBBRLL
+FFFBBBBRRL
+FBFFBBFLRL
+FBFFFBBLLR
+FFBFBFFRLL
+FFBBBFFLLR
+BFBFFBBLLL
+BBFBFFBRLL
+BFFFFBFLLR
+BFFFFFFLRL
+BBFFBFFRLR
+FBBBFBFRRR
+FFFBBFBLLL
+FFBBFBBLLL
+BFFFFBFLRL
+BFBFBFFRRR
+BFBFFFFLLR
+BFFFBFBLRL
+FBBBBBBLLR
+BFFFFFFLRR
+FFBFBFBLRL
+BFFFFBBRRR
+BFBBFBBRLR
+BFBBFFBRRL
+FFBBBBBLLL
+FBFFFFBLLR
+FBBBFFBRLL
+FBBFBFBLRL
+BFBFFFBRLL
+FFBBFBBRRL
+BFBBFBFRLL
+FFBFFBBRRL
+FBBFBFFRRR
+BBFFFBBRLL
+BBFFBFBLLL
+FBFBFFFRLR
+FBFFFBBLRL
+FBFBBBFLRL
+BFFFFFFRLR
+FFFBBFFRRL
+FBFBBFFLLR
+BFFBFFBRRR
+FBBBFBFRRL
+BFBFFBFLRR
+BBFBFFFRLL
+BFFFFBFRLR
+FFBFBBBLLL
+FBBFFFBRLR
+BFFFFBBRRL
+BBFFBBBRLL
+BBFBFBFLRR
+BBFFBBBRRL
+FBFFBBBLLL
+BFBBFFFLLL
+FBBFBBBRLL
+BBFFBBFRLL
+BFFBFBFLRR
+FBFFBFFRRR
+FBBFFBFRRR
+BBFFBBFLRL
+BBFFBFFLRR
+FBBFFFBLRR
+FFBFBFFLRR
+BBFFBFFRRR
+BFBFBFFLRL
+FBFBBFBLLL
+BBFFBFFLLL
+BFBBBBFRRR
+BBFFBFBRLL
+FBFBBBFRRL
+BFBFFFBLRL
+FBBFFBBRLR
+FFBFFFBRRR
+BFBFBFBRRL
+BFFFBFBRLL
+FBFFFBBRLR
+FFBFFBFLRR
+BBFFBBFLLR
+BBFFFBBLRR
+BBFFFFBRLL
+BBFBFFFRLR
+FBFBFBFRLL
+FBBFFBFRLL
+FFFBBBFLRR
+BFFFBFBRRL
+BFFFFBBLRL
+BFFFFFBLRR
+BFFFFBFRLL
+FBBFBFFRRL
+BBFBFBFLLL
+FBFFBBBLRL
+FBBBFFBLRR
+FBBFFBBLRR
+FFFBBFBLRL
+BFFFBFFLRR
+FFBFFBBLLR
+BFBFBFBRLR
+BBFBFBFRRR
+BFFBFFBLRL
+FBFFBFFLLL
+FBFBFFFLRR
+FBBFBFBRRR
+BBFFBFBRRR
+FBBBBBBLLL
+FBBFBBFLLL
+FBBFFBFLLL
+FFBBBBFLLR
+FFBBBFFLRR
+FBFBFFFLLL
+FFBBBFBLRL
+FFFBBFBRLL
+BBFFFFBRRL
+FFFBBFBLRR
+BFBFBBBRLL
+FBFBBBFRLR
+FBBFFBBLLL
+FBFBBBFLLR
+FBFFBBFLLR
+BFBBBBBRRR
+FBBFFBFLLR
+FBFFFBBRRL
+BFBBBFFRLR
+BFBBBFFLLR
+FBFFFBBLRR
+FFBFBBBLRL
+BFFFBBBLLL
+FFBFFFBRRL
+BBFFFFFRLL
+FFFBBFBRLR
+FFFBBBBRLL
+FBBFBBFLRR
+FBBBBFBRRL
+BFBBBBBLRR
+BBFBFFFLRL
+BFBFBBFLRR
+BFBBFFBRLR
+FBFFFFFRLR
+FFBFFFBLLL
+FBBFBFBRLL
+BFBFFBBLRR
+FBBBBFBLLL
+FBBBFBFLLL
+FBFFFBFLLL
+BFFFFFBRRR
+FBBFFBFLRL
+BBFFBFBLLR
+FBBFBBBLLR
+FFBFFFFRRL
+FBBFFBBLLR
+BFFFFFBRLL
+FBFBBFFRLR
+FBBFFFBLLL
+BFFBBBFRRR
+BFFBBFBLRR
+FFBBBBBLRR
+FFBFFBBRLR
+FFBFFFFLRL
+FFBFBBBLRR
+BFBFFBFLRL
+FBFFBFFLRL
+FFBBFFFRLR
+BFBFBFFLLL
+FFBFBFBRLR
+FFBBFFBRRL
+FFBBFBFRLR
+FBBBFBBLLR
+FBFBBBBRRR
+FBBFFFFRRR
+FBFFBBBRRL
+BFBBBBFRLL
+FBBBBBFLRL
+FBBBBBBLRL
+FFBFBBFLLR
+BFBFFBFLLL
+BFFBBBBRLR
+FBFFFFFRRR
+FBFBBBBLLR
+BFBBBFBRLR
+BFFBBBFRRL
+BFFFBFFRLR
+BFBBBBFRRL
+BBFBFBFLLR
+BFFFBBBLRR
+FFBBFBBRRR
+FBFFFBFRLL
+FBBBFFFLLR
+BFBFFFFLRL
+FFBFBFFRRL
+BBFFFFBLRL
+BFFBBFBLLL
+BFFBBBBLLL
+FBBFFFFRRL
+FBBFBFFLRL
+BFFBFBFRRL
+FBFFBBFRRL
+FBBFFBBRRR
+FFFBBBBLRR
+FFBBFFBRRR
+FBBBFFFRRL
+FFBBFFFRLL
+FFFBBBFRRL
+FBFBFBBLRL
+BFFBBBFRLL
+FBBBBBFRRR
+FBBFBFBRRL
+BFFFFBBLLR
+FBFBFFBRRL
+BFBBFFBLRL
+BFBFFBBRLL
+BFBBBBFRLR
+FFBFBBFRLR
+FFBBFBBLRL
+FBBBFFFRLR
+BFBBBFFRLL
+FBBBFFFLLL
+BBFBFFFRRR
+BFBFBBBLRR
+FBFFBFBLLL
+FFFBBFBRRR
+BBFFFBFRRL
+FBFFFFBLRR
+BBFFFFBLLL
+BBFFFFFLLL
+FFBBFFFLRR
+BFFBFBFRRR
+BFFFBFBRRR
+FBBBFFBLLR
+BFBBFBFLLL
+FFBBBBFLRL
+FBBFFBFRLR
+BFFFFBBLLL
+FFBFBFBLLL
+FBBFFBBRLL
+FBBFFFBRRL
+FBFFBBBRRR
+BFFFBFFLLL
+FBBBBBFLLL
+BFFBBFFRRL
+FBBFBBBRRL
+BBFFFFBLLR
+FBFBBBFRRR
+FFBFBBBRRL
+FFBFBBBRLR
+FBBBFBBLRL
+FFFBBBBLLL
+BFBBFBBRLL
+FBBFBBFRRR
+BFFFFBBRLL
+BFFFBBFRLR
+FBBFBBFLRL
+BFBBFBFRRR
+FFBBBBFLRR
+FFFBBBFLRL
+FBFFFBFLRR
+FBBFFFBRRR
+BFBFFBFRLL
+FBFBBFBRLR
+BFBBFFBRRR
+FFBBFBFLLL
+FBFFFFFLLR
+BFBBFFBLLR
+FBBBBFFLRL
+FFFBBFFRLR
+BFBFFBFLLR
+FFBBFFFRRR
+FBBBFFBRRL
+BFFFFFFRRR \ No newline at end of file
diff --git a/day5/input_test.txt b/day5/input_test.txt
new file mode 100644
index 0000000..11e8409
--- /dev/null
+++ b/day5/input_test.txt
@@ -0,0 +1 @@
+FBFBBFFRLR \ No newline at end of file