diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2020-12-05 12:45:17 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2020-12-05 12:45:17 +0200 |
| commit | 2cbddad19a7207d905a30938d08d147ebb283921 (patch) | |
| tree | 6a85ee5da3427a8e5a6dc86c108fef73f46947a0 /day5/index.ts | |
| parent | 8715b00668e7811b31238eca7045e7d0c00a37ef (diff) | |
Solve 5.1
Diffstat (limited to 'day5/index.ts')
| -rw-r--r-- | day5/index.ts | 59 |
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; |
