diff options
author | Marvin Borner | 2024-12-01 06:42:16 +0100 |
---|---|---|
committer | Marvin Borner | 2024-12-01 06:42:16 +0100 |
commit | ef60008497c2db371e782297ca34bd136e4bc829 (patch) | |
tree | 8786a987902f5eb6472c48756c2df7215fb620e5 | |
parent | 4f30d2364bb34c320e2e0be85eee64c2615db6de (diff) |
better
-rw-r--r-- | 2024/01/solve.bruijn | 26 | ||||
-rwxr-xr-x | 2024/01/solve.py | 21 |
2 files changed, 34 insertions, 13 deletions
diff --git a/2024/01/solve.bruijn b/2024/01/solve.bruijn new file mode 100644 index 0000000..2075668 --- /dev/null +++ b/2024/01/solve.bruijn @@ -0,0 +1,26 @@ +:import std/Combinator . +:import std/Monad/Parser . +:import std/Math N +:import std/String S +:import std/Char C + +parse some (cons <$> number <*> (spaces *> (number <* newline))) + number S.string→number <$> (some (satisfy C.numeric?)) + spaces some (satisfy (C.eq? ' ')) + newline satisfy (C.eq? '\n') + cons [[[0 2 [0 2 [[0]]]]]] + +transpose y [[rec]] + rec S.∅?(S.^0) [[0]] trans + trans [0 (S.map &[[1]] 1) (2 (S.map &[[0]] 1))] + +:test (transpose [0 [0 (+1) [0 (+2) [[0]]]] [0 [0 (+3) [0 (+4) [[0]]]] [[0]]]]) ([0 [0 (+1) [0 (+3) [[0]]]] [0 [0 (+2) [0 (+4) [[0]]]] [[0]]]]) + +part1 map go + go &[[[0 (S.sort-asc 2) (S.sort-asc S._1)]]] → &[[S.zip-with (N.abs ∘∘ N.sub) 1 0]] → N.sum + +part2 [0] + +# main (φ (S.cons ⋔ (transpose <$> parse)) part1 part2) → [0 [0] [[1]]] + +main (part1 (transpose <$> parse)) → [0 [0] [[1]]] diff --git a/2024/01/solve.py b/2024/01/solve.py index e0c8ab0..a624499 100755 --- a/2024/01/solve.py +++ b/2024/01/solve.py @@ -1,22 +1,18 @@ #!/bin/env python -# L = open("input").readlines() +from collections import Counter + L = [ [int(i) for i in l.strip().split(" ")] for l in open("input").readlines() ] -# L = [int(l.strip()) for l in open("input").readlines()] def part1(): res = 0 - left = [l[0] for l in L] - right = [l[1] for l in L] - while left: - left_min = min(range(len(left)), key=left.__getitem__) - right_min = min(range(len(right)), key=right.__getitem__) - res += abs(left[left_min] - right[right_min]) - del left[left_min] - del right[right_min] + left = sorted(l[0] for l in L) + right = sorted(l[1] for l in L) + for i in range(len(left)): + res += abs(left[i] - right[i]) print(res) @@ -24,9 +20,8 @@ def part2(): res = 0 left = [l[0] for l in L] right = [l[1] for l in L] - for i, l in enumerate(left): - res += l * right.count(l) - print(res) + c = Counter(right) + print(sum(l * c[l] for l in left)) part1() |