Skip to content

Commit

Permalink
[Nix/2023/01] Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Defelo committed Sep 20, 2024
1 parent 8576c8d commit 35adf61
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 18 deletions.
35 changes: 19 additions & 16 deletions Nix/2023/01.nix
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
let
inherit (import <nixpkgs> {}) lib;
input = builtins.readFile (builtins.getEnv "INPUT");
lines = lib.splitString "\n" (lib.removeSuffix "\n" input);
digits = line: map (s: builtins.fromJSON (builtins.head s)) (builtins.filter builtins.isList (builtins.split "([0-9])" line));
inherit (import ../lib) lib input solution;
inherit (builtins) fromJSON head filter isList split listToAttrs genList elemAt length stringLength substring attrNames foldl' add;
inherit (lib) splitString trim flatten hasPrefix last;

lines = splitString "\n" (trim input);
digits = line: map (s: fromJSON (head s)) (filter isList (split "([0-9])" line));
nums = let
words = ["one" "two" "three" "four" "five" "six" "seven" "eight" "nine"];
in
builtins.listToAttrs (builtins.genList (i: {
name = builtins.elemAt words i;
listToAttrs (genList (i: {
name = elemAt words i;
value = i + 1;
}) (builtins.length words)
++ (builtins.genList (i: {
}) (length words)
++ (genList (i: {
name = toString i;
value = i;
})
10));
prefixes = s: let len = builtins.stringLength s; in builtins.genList (i: builtins.substring i len s) len;
findWords = s: lib.flatten (map (p: builtins.filter (num: lib.hasPrefix num p) (builtins.attrNames nums)) (prefixes s));
prefixes = s: let len = stringLength s; in genList (i: substring i len s) len;
findWords = s: flatten (map (p: filter (num: hasPrefix num p) (attrNames nums)) (prefixes s));
findNums = s: map (num: nums.${num}) (findWords s);
sum = builtins.foldl' builtins.add 0;
solve = digits: sum (map (d: builtins.head d * 10 + lib.last d) (map digits lines));
in {
p1 = solve digits;
p2 = solve findNums;
}
sum = foldl' add 0;
solve = digits: sum (map (d: head d * 10 + last d) (map digits lines));
in
solution {
p1 = solve digits;
p2 = solve findNums;
}
4 changes: 2 additions & 2 deletions Nix/justfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ _default:
@just --list

run year day:
INPUT=$(realpath ../.cache/{{year}}/{{trim_start_match(day, "0")}}) nix eval --raw -f {{year}}/{{day}}.nix --apply 's: "${toString s.p1}\n${toString s.p2}\n"'
INPUT=$(realpath ../.cache/{{year}}/{{trim_start_match(day, "0")}}) nix eval --raw -f {{year}}/{{day}}.nix

example year day ex:
INPUT=$(realpath ../examples/{{year}}/{{trim_start_match(day, "0")}}/{{ex}}) nix eval --raw -f {{year}}/{{day}}.nix --apply 's: "${toString s.p1}\n${toString s.p2}\n"'
Expand All @@ -20,4 +20,4 @@ test-year year:
@set -e; for day in $(ls {{year}}); do just test {{year}} $(basename $day .nix); done

test-all:
@set -e; for year in *; do [[ -d $year ]] || continue; just test-year $year; done
@set -e; for year in *; do [[ -d $year ]] && [[ "$year" != "lib" ]] || continue; just test-year $year; done
11 changes: 11 additions & 0 deletions Nix/lib/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
rec {
inherit (import <nixpkgs> {}) lib;

input = builtins.readFile (builtins.getEnv "INPUT");

solution = {
p1,
p2 ? null,
}:
"${toString p1}\n" + (lib.optionalString (p2 != null) "${toString p2}\n");
}

0 comments on commit 35adf61

Please sign in to comment.