aboutsummaryrefslogtreecommitdiffstats
path: root/day5/index.ts
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2020-12-05 12:45:17 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2020-12-05 12:45:17 +0200
commit2cbddad19a7207d905a30938d08d147ebb283921 (patch)
tree6a85ee5da3427a8e5a6dc86c108fef73f46947a0 /day5/index.ts
parent8715b00668e7811b31238eca7045e7d0c00a37ef (diff)
Solve 5.1
Diffstat (limited to 'day5/index.ts')
-rw-r--r--day5/index.ts59
1 files changed, 59 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;