2024 day 6 part 1
This commit is contained in:
parent
1f2171f3a5
commit
66b7646869
10
2024/06/example.txt
Normal file
10
2024/06/example.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
....#.....
|
||||
.........#
|
||||
..........
|
||||
..#.......
|
||||
.......#..
|
||||
..........
|
||||
.#..^.....
|
||||
........#.
|
||||
#.........
|
||||
......#...
|
130
2024/06/input.txt
Normal file
130
2024/06/input.txt
Normal file
|
@ -0,0 +1,130 @@
|
|||
..........#.............................#...............#...........#....................#...........#............................
|
||||
..............................#.......#...#.....#.....#...............#.#..#.......................#............#.................
|
||||
.............#...........#.#........#............#..........................#.........#.......#......#............................
|
||||
......................................................#....#..#.............#................................#...#............##..
|
||||
...............#.....#....................................#......................................................#................
|
||||
..................##............#......#...............................................................#...................#......
|
||||
.#......#...........................................................#............................#................................
|
||||
#..#.............#...............................#.....#....#.............................#....#..............................#...
|
||||
#...##..........#.........................#.................................................#............#...............#........
|
||||
............#...............#..............................................#.................................#..........##........
|
||||
..............#...................#......##...#.....#....................#.......................................................#
|
||||
.#.....#....#......................#...#........................................#.#.............#.........#.......................
|
||||
#..#...............#........##.........#.....#..........#.....##.........................#.....#.#................................
|
||||
...............#...............................#.....#.................................................#..##......................
|
||||
......#...................#..........#...........................................#....#...........................................
|
||||
...............................................#...#....##.................................................#.....#................
|
||||
.................#.........#..............................#........#...#...#...................................#..................
|
||||
...........#..#.....#...#.........................#..........#.#.............#....#...................##..........................
|
||||
.........................................#.........................#.#............#...#...##............................#.........
|
||||
.....#......................................#....................................................#..............#.................
|
||||
..................................................#..................#................#.............#.#..#..................#.....
|
||||
............................................#.....#......................#........#..........................................#....
|
||||
.......#..........................#...#...................................#.........................#...#..........#......#.......
|
||||
............#...........##........................................................................#......................#........
|
||||
#.#...............................................#........#..........#.#..#...#................................#.................
|
||||
..#.........................#.#........................#....##..................................................#............#....
|
||||
.....................................................................................#...............#...........#..........#.....
|
||||
....................#..........#................................#...............................................#.................
|
||||
#..............#.#...........#.........#..........#..........................#......................##........#.........#.........
|
||||
....#....#...............................................................................#...#...........#............#...#...#...
|
||||
.......................................................##......................#...#................................#.............
|
||||
.......#...........##...........................#..............#..............................#...................#......#........
|
||||
......#.........#..............................................................#........#..#..........#.......#..#...#.....#....#.
|
||||
....#.............................................#........#....#..................................#..............................
|
||||
..........#......#...........#....................................#..............#.......#...#............#.......................
|
||||
...........................................................................................#.......#..............................
|
||||
.#..................................................#.............................#..................#...................#........
|
||||
......#..#.#................#.....................#..................................#.............#...............#..............
|
||||
...............................#..................#........#......................................................................
|
||||
......................#..................................................................................#.........#..............
|
||||
...............................................................................................................................#..
|
||||
.......#..............#...........................................................#......................#.......................#
|
||||
#...............................#..............................#.......#..............................#...#...#........#..........
|
||||
............................#....#...#.........#....#................................................................#............
|
||||
.....................#.................................................................#..#....#..................#...............
|
||||
......................#.............#.............................#...................................................#...........
|
||||
....#.................#.#.........##................#.....#....................................................#.............#....
|
||||
...............................#...#...................#.......................................#......#...........................
|
||||
....#.............................................................................................................................
|
||||
...#.......................................................................................................#............#.......#.
|
||||
..#.............##.............................................................#...#............................#............#....
|
||||
......................#.......#............#........................................................#..................#......#...
|
||||
...................#.............#..................#..............................#............#........#...................#....
|
||||
....................#...........#.........................................................#......#.......#...........#.....##.....
|
||||
...........#.........................................#.............................#..............#..................#............
|
||||
......................#.........#...................#......#...........................................#..........................
|
||||
..#....#...#.............................#..............#.....................#............#...................................#..
|
||||
.....#.............................#....#..................................#...................#...#.............#................
|
||||
...................#...#...........#........................#.............#........................#...#.............#..........#.
|
||||
...#...........#......#.......#..............#......#..........#.....#............................................................
|
||||
..#......................................................#......#...........................#...........#......#..#...............
|
||||
........#............................#.#....................#...#...#......#.....#...............................................#
|
||||
.............#....#........#.........................................................................................#.........#..
|
||||
....................................................................................................#.............................
|
||||
..#........................#....#............................................................................#....................
|
||||
.......................................#.....#.#.......................................#......#........#.#...................#....
|
||||
.................#........#....................................#...#..#................................#..........................
|
||||
...........#.................................................................................................#....................
|
||||
......................#..................#...#.............#................##................#.......#...........#.........#.....
|
||||
............#..#................#.............................................#............##..................##..........#......
|
||||
......#.#.......................#............#...........................................................#........................
|
||||
#......................................#.#......^...............................................#.................................
|
||||
........#...........................................................#...............#.............................................
|
||||
...#.............................................#.................#...............#.............................#...#.#..........
|
||||
....................#........#...........##.......................#.................#..................#................#.........
|
||||
#.................................................................................................................................
|
||||
............#.......................................................................................#.#.........#..............#..
|
||||
...............#....#............#..................................................#......##.................................#...
|
||||
.............................#.........#...............#......#.......#.................#........................#........#.......
|
||||
......................................................#........................................................#.................#
|
||||
.................#.#...............#......................................................................................#....#..
|
||||
........#.............#......................#...........#...........#......................................#..............#......
|
||||
......................#......................#...........#.....#.....##............................................#....#.........
|
||||
.............#................................................................................#..........#.....#..................
|
||||
............##...........................#.................................#..#.#....................................#............
|
||||
..............................................................................................#............................#......
|
||||
...#.............................#..#..#....................................#..............#....#.................................
|
||||
.....#..........................................................#.....#......#.........#..........................................
|
||||
....##......#.....................#..........#..............#..................#.#..............#........#...........#....#.......
|
||||
.....#...#.........#............#............#.............................................................#......................
|
||||
.........#...................................#...........#.....................................##.....#............#..............
|
||||
.....##.#............##.....................#..........................#.................................#........#...............
|
||||
.......................#..............##...#...................................................#.........#........................
|
||||
..#........#.......#...#..##............#....................................................................#...........#.....#..
|
||||
..#.....................................................................#..............#.............#...................#........
|
||||
...........#..........#..........#.....#.................................................................#..#.....................
|
||||
..........#................#........................................................##.#...............................#.#......#.
|
||||
#............................................#...........................##...#.......................#.............#.............
|
||||
..#............#........................................................................................................#.........
|
||||
....................................................#....................#............#...............#..........................#
|
||||
........................................................................#.......#.....................................#.#.........
|
||||
................#..#......................#...........................................#...........................................
|
||||
........................##............................................#.............##..........................#.......#....#....
|
||||
.........#.......#..............................#......#....#............#..................#...#.................................
|
||||
#.........#............................#....#.#..#.........................................................##.....................
|
||||
.#..##...............#....#.............................#...............#........#.......................................#......#.
|
||||
...#............................................................#.....................#.................#.....#...................
|
||||
...#...........#..#.............................#.....#.............................................................#.............
|
||||
...#.........................#..............................................................................................##....
|
||||
.........................#...........................#.......................#...........#........................................
|
||||
.#..................................#.............................................................................................
|
||||
....................................................................#...........##.....#.#.........#.....#........................
|
||||
................#...............................#........#........................................................................
|
||||
......#....#.................................#...................................#.#.........#.....#....................#.........
|
||||
................#..............................#.......................#...#.....#.......#................#.......................
|
||||
....................#......................................#..#...........#.#.................#...#.......................#.......
|
||||
.............#..#...#............................#.#...........................................#.......................#..........
|
||||
.........#..........#.................#....................................#.#..........................................#.........
|
||||
....#.............#......................................................#...........#...........................#................
|
||||
........#.#............................#...........................................#.................#..............#..........#..
|
||||
..............#..........................#............#.........#....#...#.....#.........................#....#...............##..
|
||||
...................#.........................................................#.......#........#..............#..........#.........
|
||||
.#........#....#..................................#..#.#...............#............#...........#.................................
|
||||
...............................................................................................#.....#....#.............#.........
|
||||
...........#..........#...........................................#.........#..............#................#..........#..........
|
||||
............#.................................###..............#.#...............................................................#
|
||||
......#...................................................................................#............#...#..........#.....#.....
|
||||
.............#..................#...................#......#.........#..#.......................#....#................#..........#
|
||||
..#....##................................#.................#...........................#.......#....#...#..........#..............
|
||||
...............................#......................................#.........#.............#......................#..........#.
|
62
2024/06/solution.nix
Normal file
62
2024/06/solution.nix
Normal file
|
@ -0,0 +1,62 @@
|
|||
{lib, ...}: input: rec {
|
||||
|
||||
content = lib.trim input;
|
||||
|
||||
chart = content
|
||||
|> lib.strings.splitString "\n"
|
||||
|> map (lib.strings.splitString "")
|
||||
|> map (line: lib.sublist 1 (builtins.length line - 2) line)
|
||||
;
|
||||
|
||||
startingPos = let
|
||||
xs = map (lib.lists.findFirstIndex (char: char == "^") null) chart;
|
||||
y = lib.lists.findFirstIndex (x: !isNull x) null xs;
|
||||
x = builtins.elemAt xs y;
|
||||
in
|
||||
{inherit x y;}
|
||||
;
|
||||
|
||||
posToString = {x, y}: "${toString x},${toString y}";
|
||||
|
||||
addVec = a: b: {x = a.x + b.x; y = a.y + b.y;};
|
||||
|
||||
index = i: list: builtins.elemAt list i;
|
||||
|
||||
getChar = {x, y}: chart
|
||||
|> index y
|
||||
|> index x
|
||||
;
|
||||
|
||||
height = builtins.length chart;
|
||||
width = chart |> index 0 |> builtins.length;
|
||||
|
||||
progress = {visited ? {}, pos, dir, ...}: let
|
||||
nextChar = getChar (addVec pos dir);
|
||||
newDir = if nextChar == "#" then rotate dir else dir;
|
||||
newPos = addVec pos newDir;
|
||||
fwd = addVec pos dir;
|
||||
in
|
||||
{
|
||||
visited = visited // {${posToString pos} = true;};
|
||||
exited = fwd.y >= height || fwd.x >= width || fwd.y < 0 || fwd.x < 0;
|
||||
pos = newPos;
|
||||
dir = newDir;
|
||||
};
|
||||
|
||||
rotate = {x, y}: {x = -y; y = x;};
|
||||
|
||||
startingDir = {x = 0; y = -1;};
|
||||
|
||||
getVisits = {pos ? startingPos, dir ? startingDir, visited ? {}, ...}:
|
||||
let
|
||||
nextStep = progress {inherit pos dir visited;};
|
||||
in if nextStep.exited then visited else getVisits nextStep;
|
||||
|
||||
part1result = getVisits {}
|
||||
|> builtins.attrNames
|
||||
|> builtins.length
|
||||
# the last position
|
||||
|> (v: v + 1)
|
||||
;
|
||||
|
||||
}
|
59
2024/flake.lock
Normal file
59
2024/flake.lock
Normal file
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1732837521,
|
||||
"narHash": "sha256-jNRNr49UiuIwaarqijgdTR2qLPifxsVhlJrKzQ8XUIE=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "970e93b9f82e2a0f3675757eb0bfc73297cc6370",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1703013332,
|
||||
"narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=",
|
||||
"path": "/nix/store/50bgi74d890mpkp90w1jwc5g0dw4dccr-source",
|
||||
"rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6",
|
||||
"type": "path"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs",
|
||||
"tix": "tix"
|
||||
}
|
||||
},
|
||||
"tix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704309534,
|
||||
"narHash": "sha256-U9qeMl0WBlpy335gL06WFGvPxLBTd+ToiiCHUHWrgR0=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "5007770e88c4d5f67c3790761a1125904a9ef257",
|
||||
"revCount": 20,
|
||||
"type": "git",
|
||||
"url": "https://git.tristans.cloud/tristan/tix"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.tristans.cloud/tristan/tix"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
33
2024/flake.nix
Normal file
33
2024/flake.nix
Normal file
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
description = "A very basic flake";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||
tix.url = "git+https://git.tristans.cloud/tristan/tix";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, tix }: let
|
||||
pkgs = import nixpkgs {system = "x86_64-linux";};
|
||||
in {
|
||||
|
||||
day06 = let
|
||||
solution = import ./06/solution.nix pkgs;
|
||||
example = (pkgs.lib.readFile ./06/example.txt);
|
||||
input = (pkgs.lib.readFile ./06/input.txt);
|
||||
in {
|
||||
part1example = (solution example);
|
||||
part1 = (solution input);
|
||||
};
|
||||
|
||||
packages.x86_64-linux.watch = tix.watch {
|
||||
cmd = ''
|
||||
nix run .\#test --impure --extra-experimental-features pipe-operators
|
||||
'';
|
||||
};
|
||||
|
||||
packages.x86_64-linux.test = tix.run [
|
||||
./solution.test.nix
|
||||
];
|
||||
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue