advent-of-code/2024/day03/default.nix
2024-12-03 08:31:44 +01:00

48 lines
1007 B
Nix

{ pkgs, lib }:
with lib;
let
input = fileContents ./input.txt;
answer1 = lib.pipe input [
(split "mul\\(([[:digit:]]{1,3}),([[:digit:]]{1,3})\\)")
(lib.filter isList)
(map (map toInt))
(map (xs: (head xs) * (last xs)))
(foldl add 0)
toString
];
answer2 = lib.pipe input [
(split "mul\\(([[:digit:]]{1,3}),([[:digit:]]{1,3})\\)|(do\\(\\))|(don't\\(\\))")
(lib.filter isList)
(map (xs:
if elemAt xs 0 != null
then (toInt (elemAt xs 0)) * (toInt (elemAt xs 1))
else if elemAt xs 2 != null
then "do"
else if elemAt xs 3 != null
then "dont"
else null
))
(foldl ({ toggle, sum }: x: {
toggle = if x == "do" then true
else if x == "dont" then false
else toggle;
sum = sum + (if toggle && isInt x then x else 0);
}) {
toggle = true;
sum = 0;
})
(x: toString x.sum)
];
in
pkgs.writeText "answers" ''
Task1:
${answer1}
Task2:
${answer2}
''