aboutsummaryrefslogtreecommitdiffstats
path: root/day1/index.ts
blob: 93f0ec65274d6c3982c5ea437550d8b901973aa2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { of } from "rxjs";
import { filter, map } from 'rxjs/operators';
import { ExerciseModuleFunc } from "../types";

type Pair<T, K> = [T, K];

const day1: ExerciseModuleFunc = async (input: string) => {
  const numbers = input.split("\n").map(line => Number(line));
  const obs = of(...numbers).pipe(
    map((number, index) => [number, numbers.slice(index)] as Pair<number, number[]>),
    map(pair => [pair[0], pair[1].find(elem => pair[0] + elem === 2020)] as Pair<number, number | undefined>),
    filter(pair => pair[1] !== undefined),
    map(pair => pair[0] * pair[1]),
    map(solution => solution.toString())
  )

  return obs.toPromise();
}

export default day1;