day 2 part 1
This commit is contained in:
parent
1f92f032ca
commit
6a41f0587c
5 changed files with 71 additions and 4 deletions
|
|
@ -9,7 +9,7 @@ with builtins;
|
||||||
with import ./utils.nix;
|
with import ./utils.nix;
|
||||||
let
|
let
|
||||||
# Split into non-empty lines
|
# Split into non-empty lines
|
||||||
lines = builtins.filter (s: builtins.isString s && s != "") (builtins.split "\n" input);
|
lines = split "\n" input;
|
||||||
|
|
||||||
# Parse a line like "L68" or "R14"
|
# Parse a line like "L68" or "R14"
|
||||||
parseLine = line: {
|
parseLine = line: {
|
||||||
|
|
|
||||||
51
2025/day_2.nix
Normal file
51
2025/day_2.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# nix eval -f ./day_2.nix part1
|
||||||
|
# nix eval -f ./day_2.nix part1 --arg input 'builtins.readFile ./puzzle_cache/day_2_1'
|
||||||
|
# nix eval -f ./day_2.nix part2
|
||||||
|
# nix eval -f ./day_2.nix part2 --arg input 'builtins.readFile ./puzzle_cache/day_2_1'
|
||||||
|
{
|
||||||
|
input ? (builtins.readFile ./puzzle_cache/day_2_0),
|
||||||
|
}:
|
||||||
|
with builtins;
|
||||||
|
with import ./utils.nix;
|
||||||
|
let
|
||||||
|
# reversedChars =
|
||||||
|
# str:
|
||||||
|
# let
|
||||||
|
# len = length str;
|
||||||
|
# in
|
||||||
|
# builtins.genList (i: builtins.elemAt str (len - 1 - i)) len;
|
||||||
|
isStrPatternSplit =
|
||||||
|
str:
|
||||||
|
let
|
||||||
|
strLen = stringLength str;
|
||||||
|
in
|
||||||
|
(
|
||||||
|
if mod strLen 2 == 0 then
|
||||||
|
let
|
||||||
|
half = strLen / 2;
|
||||||
|
firstHalf = substring 0 half str;
|
||||||
|
secondHalf = substring half strLen str;
|
||||||
|
# secondReversed = reversedChars secondHalf;
|
||||||
|
in
|
||||||
|
firstHalf == secondHalf
|
||||||
|
else
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
ranges = map (range: map (v: toIntBase10 v) (split "-" range)) (split "," input);
|
||||||
|
fullRanges = map (itr: map (v: toString v) (rangeInclusive (elemAt itr 0) (elemAt itr 1))) ranges;
|
||||||
|
invalidIds = flatten (
|
||||||
|
map (
|
||||||
|
range:
|
||||||
|
(reduce (
|
||||||
|
invalidIds: id: invalidIds ++ (if isStrPatternSplit id then [ id ] else [ ])
|
||||||
|
) [ ] range)
|
||||||
|
) fullRanges
|
||||||
|
);
|
||||||
|
invalidIdNums = map (v: toIntBase10 v) invalidIds;
|
||||||
|
invalidIdSum = sum invalidIdNums;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
part1 = invalidIdSum;
|
||||||
|
part2 = 0;
|
||||||
|
}
|
||||||
1
2025/puzzle_cache/day_2_0
Normal file
1
2025/puzzle_cache/day_2_0
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
|
||||||
1
2025/puzzle_cache/day_2_1
Normal file
1
2025/puzzle_cache/day_2_1
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
96952600-96977512,6599102-6745632,32748217-32835067,561562-594935,3434310838-3434398545,150-257,864469-909426,677627997-677711085,85-120,2-19,3081-5416,34-77,35837999-36004545,598895-706186,491462157-491543875,5568703-5723454,6262530705-6262670240,8849400-8930122,385535-477512,730193-852501,577-1317,69628781-69809331,2271285646-2271342060,282-487,1716-2824,967913879-967997665,22-33,5722-11418,162057-325173,6666660033-6666677850,67640049-67720478,355185-381658,101543-146174,24562-55394,59942-93946,967864-1031782
|
||||||
|
|
@ -1,6 +1,20 @@
|
||||||
{
|
with builtins;
|
||||||
toIntBase10 = str: builtins.fromJSON "${str}";
|
rec {
|
||||||
mod = a: b: a - b * (builtins.floor (a / b));
|
toIntBase10 = str: fromJSON "${str}";
|
||||||
|
mod = a: b: a - b * (floor (a / b));
|
||||||
min = a: b: if a < b then a else b;
|
min = a: b: if a < b then a else b;
|
||||||
max = a: b: if a > b then a else b;
|
max = a: b: if a > b then a else b;
|
||||||
|
split = delim: input: filter (s: isString s && s != "") (split delim input);
|
||||||
|
reduce = foldl'; # foldl' (acc: elem: acc + elem) 0 [1 2 3]
|
||||||
|
flatten = input: concatMap (x: if isList x then x else [ x ]) input;
|
||||||
|
rangeInclusive =
|
||||||
|
min: max:
|
||||||
|
if min > max then
|
||||||
|
[ ]
|
||||||
|
else
|
||||||
|
let
|
||||||
|
len = max - min + 1;
|
||||||
|
in
|
||||||
|
genList (i: min + i) len;
|
||||||
|
sum = input: reduce (sum: v: sum + v) 0 input;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue