aboutsummaryrefslogtreecommitdiffstats
path: root/day1
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2020-12-01 14:13:46 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2020-12-01 14:13:46 +0200
commitcca3701cd6bb6c479aeb1ece71aa5bae5383ae65 (patch)
treea7be4ffef1ede8da5c698a3621f73be020bddddc /day1
parente64ee9e095e50dcba06c9edf9e43dc9c57f98f8e (diff)
Solve 1.2
Diffstat (limited to 'day1')
-rw-r--r--day1/index.ts33
1 files changed, 29 insertions, 4 deletions
diff --git a/day1/index.ts b/day1/index.ts
index 93f0ec6..e93a688 100644
--- a/day1/index.ts
+++ b/day1/index.ts
@@ -1,20 +1,45 @@
import { of } from "rxjs";
-import { filter, map } from 'rxjs/operators';
+import { concatAll, filter, map } from 'rxjs/operators';
import { ExerciseModuleFunc } from "../types";
type Pair<T, K> = [T, K];
+type Triple<A, B, C> = [A, B, C];
+
+const allTriples = <T extends unknown>(lst: T[]): Triple<T, T, T>[] => {
+ const results: Triple<T, T, T>[] = [];
+ lst.forEach((a, ai) => {
+ lst.slice(ai + 1).forEach((b, bi) => {
+ lst.slice(bi + 1).forEach((c, _ci) => {
+ results.push([a, b, c]);
+ })
+ })
+ });
+ return results;
+}
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[]>),
+ const obs1 = of(...numbers).pipe(
+ map((number, index) => [number, numbers.slice(index + 1)] 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();
+ const first = await obs1.toPromise();
+
+ const obs2 = of(numbers).pipe(
+ map(allTriples),
+ concatAll(),
+ filter(t => t[0] + t[1] + t[2] === 2020),
+ map(t => t[0] * t[1] * t[2]),
+ map(sol => sol.toString())
+ );
+
+ const second = await obs2.toPromise();
+
+ return [first, second];
}
export default day1;