advent-of-code-2024/day1/part1.nix
2024-12-11 18:45:16 -07:00

41 lines
No EOL
1.3 KiB
Nix

let
# Import nixpkgs lib and input file
inherit ((builtins.getFlake (builtins.toString ./..)).inputs.nixpkgs) lib;
input = builtins.readFile (builtins.toString ./input.txt);
# Define functions
abs = n: if n < 0 then (-n) else n;
# Do parsing
parsed = ( # Define function to sort lines into two lists
lib.lists.foldr
(cur: acc: {
first = acc.first ++ [(lib.strings.toIntBase10 (builtins.elemAt cur 0))];
second = acc.second ++ [(lib.strings.toIntBase10 (builtins.elemAt cur 1))];
})
{ first = []; second = []; }
) ( # Call with input split on newlines and 3 spaces; formatted like [ [ 1 2 ] [ 3 4 ] [ 5 6 ] ]
lib.lists.forEach
(lib.strings.splitString "\n" input)
(e: lib.strings.splitString " " e)
);
sorted = {
first = lib.lists.sort (a: b: a < b) parsed.first;
second = lib.lists.sort (a: b: a < b) parsed.second;
};
reorganized = (
lib.lists.imap0
(i: e: [ e (builtins.elemAt sorted.second i) ])
sorted.first
);
output = (
(
lib.lists.foldr
(cur: acc:
acc + (abs ((builtins.elemAt cur 0) - (builtins.elemAt cur 1)))
)
0
) reorganized
);
in output