finish 2023
This commit is contained in:
16
2023/go/.vscode/launch.json
vendored
Normal file
16
2023/go/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Launch Package",
|
||||||
|
"type": "go",
|
||||||
|
"request": "launch",
|
||||||
|
"mode": "auto",
|
||||||
|
"args": ["16"],
|
||||||
|
"program": "${fileDirname}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
95
2023/go/day14/day14.go
Normal file
95
2023/go/day14/day14.go
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
package day14
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "adventofcode2023/utils"
|
||||||
|
"adventofcode2023/utils/grid2d"
|
||||||
|
"adventofcode2023/utils/inputs"
|
||||||
|
"fmt"
|
||||||
|
_ "strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Part1(input string) int {
|
||||||
|
grid := inputs.ToGrid2D[rune](input, "\n", "", ' ', func(c string) rune { return rune(c[0])})
|
||||||
|
// fmt.Println(grid.StringWithFormatter(func(c rune, x int, y int) string { return string(c)}))
|
||||||
|
slide(grid)
|
||||||
|
// fmt.Println(grid.StringWithFormatter(func(c rune, x int, y int) string { return string(c)}))
|
||||||
|
return score(grid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part2(input string) int {
|
||||||
|
grid := inputs.ToGrid2D[rune](input, "\n", "", ' ', func(c string) rune { return rune(c[0])})
|
||||||
|
// fmt.Println(grid.StringWithFormatter(func(c rune, x int, y int) string { return string(c)}))
|
||||||
|
x:= 0
|
||||||
|
for j:=0;j<125;j++ {
|
||||||
|
for i:=0;i<4;i++ {
|
||||||
|
slide(grid)
|
||||||
|
grid = rotate(grid)
|
||||||
|
}
|
||||||
|
if score(grid) == 101375 {
|
||||||
|
fmt.Println(j, j - x)
|
||||||
|
x = j
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(score(grid))
|
||||||
|
for j:=999999840+125;j<1000000000;j++ {
|
||||||
|
for i:=0;i<4;i++ {
|
||||||
|
slide(grid)
|
||||||
|
grid = rotate(grid)
|
||||||
|
}
|
||||||
|
if score(grid) == 101375 {
|
||||||
|
fmt.Println(j, j - x)
|
||||||
|
x = j
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// fmt.Println(grid.StringWithFormatter(func(c rune, x int, y int) string { return string(c)}))
|
||||||
|
return score(grid)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func slide(grid *grid2d.Grid[rune]) {
|
||||||
|
G := grid.Matrix()
|
||||||
|
R := len(G)
|
||||||
|
C := len(G[0])
|
||||||
|
for c:=0;c<C;c++ {
|
||||||
|
for r:=0;r<R;r++ {
|
||||||
|
for dr:=0;dr<R;dr++ {
|
||||||
|
if G[dr][c]=='O' && dr>0 && G[dr-1][c]=='.' {
|
||||||
|
G[dr][c]='.'
|
||||||
|
G[dr-1][c] = 'O'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func rotate(grid *grid2d.Grid[rune]) *grid2d.Grid[rune] {
|
||||||
|
G := grid.Matrix()
|
||||||
|
R := len(G)
|
||||||
|
C := len(G[0])
|
||||||
|
New := grid2d.NewGrid[rune](R, C, '?')
|
||||||
|
NG := New.Matrix()
|
||||||
|
for r:=0;r<R;r++ {
|
||||||
|
for c:=0;c<C;c++ {
|
||||||
|
NG[c][R-1-r] = G[r][c]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return New
|
||||||
|
}
|
||||||
|
|
||||||
|
func score(grid *grid2d.Grid[rune]) int {
|
||||||
|
ans := 0
|
||||||
|
|
||||||
|
G := grid.Matrix()
|
||||||
|
R := len(G)
|
||||||
|
C := len(G[0])
|
||||||
|
|
||||||
|
for r:=0;r<R;r++ {
|
||||||
|
for c:=0;c<C;c++ {
|
||||||
|
if G[r][c]=='O' {
|
||||||
|
ans += len(G)-r
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ans
|
||||||
|
}
|
||||||
37
2023/go/day14/day14_test.go
Normal file
37
2023/go/day14/day14_test.go
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package day14
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPart1(t *testing.T) {
|
||||||
|
r := Part1(
|
||||||
|
`O....#....
|
||||||
|
O.OO#....#
|
||||||
|
.....##...
|
||||||
|
OO.#O....O
|
||||||
|
.O.....O#.
|
||||||
|
O.#..O.#.#
|
||||||
|
..O..#O..O
|
||||||
|
.......O..
|
||||||
|
#....###..
|
||||||
|
#OO..#....`)
|
||||||
|
require.Equal(t, 136, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPart2(t *testing.T) {
|
||||||
|
r := Part2(
|
||||||
|
`O....#....
|
||||||
|
O.OO#....#
|
||||||
|
.....##...
|
||||||
|
OO.#O....O
|
||||||
|
.O.....O#.
|
||||||
|
O.#..O.#.#
|
||||||
|
..O..#O..O
|
||||||
|
.......O..
|
||||||
|
#....###..
|
||||||
|
#OO..#....`)
|
||||||
|
require.Equal(t, 64, r)
|
||||||
|
}
|
||||||
100
2023/go/day14/input.txt
Normal file
100
2023/go/day14/input.txt
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
O...#.O......#...##....O#.#.OO...O.#OO#.....#O.O.....#......#.OO...O...O..O#O#....#...O..O...O.....O
|
||||||
|
.OO......O.OO.O.#.#O.O...#.##OO.....#.#O#...OOOOO..##O#O..O#O.##O...#O....O#.#.OO....#.........O.O.O
|
||||||
|
......O.O.O.....O.#.#.#OO#O#.O...O.#.......#O....#.O.#....OOO...#....O#O.......#......O...O##...O...
|
||||||
|
O...##O..#....OO.OO....O...O...O#..##.OOO..O..#OO....###....OO.O.O...........O...O..O.....#.#..O.O#.
|
||||||
|
............#.#.##O.O.#.#OO#........O..O.O..##....O.#..#O..O...O#.#.#.........O...........OO......O.
|
||||||
|
#.OO........#..#O.#......#....#....#......OO..OO...O#...#...#..##..O#.O......#.#..O..#O#...#..#.O#.O
|
||||||
|
O.O.##...........O...O..O...O.OO.......##....#...O.....##...#.....OO...O.O#...OO..........O...O..#O.
|
||||||
|
.O##....#.O#O....O.O.#.#O.O#..OO..##..#OO.#...#......#.#O#.....O...O#.O...#..O.#.#......#.##.O....O.
|
||||||
|
.........#..#.O..O..O.O...#.#.O...#.OOO.##..#.O.....OO#....O...OOO#.O#....##O..#.O.O.....O.O.O.O..O.
|
||||||
|
......#O.....OOO###.O..O####O.#.O...............#..O......##O...#.#..###...O....#O...OO.OO.O......O.
|
||||||
|
#.O....#.O..#O...#...#...O....OOO.#O.#.#..#.....#.#..OO..#OO.......#OO.OOO....O.#O.#.O......####..O.
|
||||||
|
OOOO...#.OO.#....O...O.O...##....#OO...O.##.O.....###..O........OO..O.O.......#.#...O..#..O.#..O....
|
||||||
|
OOO..##....O...O.....O#..O.O.#..O..#.#.#..O........O..#OOO.....#....O#OO.#.#.....O..#..O...O..O.#OO#
|
||||||
|
...##.#.##.#O....O#..O..O.........#.#.#O...O.......O...O#..OOOO....O...O.OO#.O.##...#....O..O.......
|
||||||
|
....##.###OOO.O...#.......OO....OOO....O.OO#..O.#..OO....OO......O..OO...OOO.OO#...#..OOO..O.###O...
|
||||||
|
O###O.....O.O.#O#.O.O#O.O###.....O..O........#....#..O#..#.#..O...........#......#OO........O..O####
|
||||||
|
.#.#.OOO.O.......#O..O.#..O.OO.OO.O..O.#.#...O.O.OO..##..O...#...#O#..O.........O.O..O.O#....O..#O..
|
||||||
|
.#..#O.#O..#.O.O.O...#OO....#...O....O..O.O...#..#.##O.O..O..#O.....OO##...O#.......O#O.#..........#
|
||||||
|
#O...#.#OO.O...#O...O...#.#.O#..#.O#.###.#......O..O....#..#.OO..#....O..O.O....#.O.O.O.#..O..OOO..O
|
||||||
|
O.....#...#.#OOO.OOOO..#O.O.#...O.##..OO..#O...#.....OO#..#.#...O##OO...O.....O..#...#...........O.O
|
||||||
|
.##.O#.O..#O#.O##.O.#.........##.O......#OO...OO.......#...#O.O#...O..#.#...O..#...#O...O.#....OO.OO
|
||||||
|
.O#OO.O..#...#..O..O...##.O....###O.....O...#.#OOO...OO...O.......#.#.#.OO....#OO.#..O..........OO..
|
||||||
|
.....#OO.O..O.O.O...O.O#.#.O...O..#...O##.......#......#O...#.#.#....#..O.O..#..........O..#.#..#O..
|
||||||
|
...O.O.O.OO...O#..O..OO..O#.#.O.#OO..O.O..OO..O#...#.O#...O.......#..#..O..##..O..#O......O.OO...O.O
|
||||||
|
#.O....O.O.#...O.....O.....O#......#.#..OO...#.....O.#.#.O...#.#....#....O#.O.#......#OOO.O...O#....
|
||||||
|
...OOO......#..O..O#.......#....O#OO..#O.#.#...#...O.O..OO..#.O...O..#.....OO..O..#...#.O...O#..O.OO
|
||||||
|
#OO.OO#.OOO...##............O....O.O..#.##.#.O.........##...#O.O..#................#..O.O.O#O.O#..##
|
||||||
|
.O.O.O##..#O.O#O...##.#OO#...#.OO#..O...O#...O....O#..OO....O....#...O...#OO.OO#O....#..O..#OO....O.
|
||||||
|
.OO.#.......#...O...OO..#..OO.O.O.OO#O.O.O...O....O#..#.O.........O..#.O...#.#...O.O......O........O
|
||||||
|
.O....##..#....#.....O.#...O.O.#....#....OOOO...O.O###.O........O.....O.O..#.##OOO.O.......#.#.O..O.
|
||||||
|
.#.....O...#.O...#........#...#....#OO.O...O#O........OOO...#.O....OOO#.O.....OO....#.#...#..OO..#..
|
||||||
|
OO.OO...O..#..#O....O.O....OOOOO.#O.#O.O...#.O....O#.O.O.#O.#...#..O...O.#O.O.#..O....OOO......#.O#.
|
||||||
|
.O##..OO.....#.OO..#..O..#...#.#........O..OO...#O..O....#..O..O#.....O#..##O..O#.##.#...#.O..O.O.O.
|
||||||
|
..#...#O.....OO#.....O..#.#O.#.#..#..O.....#...OO.#.....O..O.O##.O.....OOOO.#O.....O.#..O........#.#
|
||||||
|
.#.#O..O.O..#..O##.....O.OO...##.........O...####..O..O....#O..O.....##........O.#..#.#OO.#..O.##.O#
|
||||||
|
#...#.O....OO......#O...#O..O#..#O#O.#..#.....OO....OO#..#O....O.O..#.O.#.....O#.O.OO..O#.O.O..O.O#.
|
||||||
|
OO....OO......#O........#O...#.#..O##....O#..#.#O.O.#....O..O..O.O....O.......#..OOO#.........O....O
|
||||||
|
O.....#O.OO##......#O##..O..O...##..O..........O..OO.O..#O....O..OOO#OO.##..#....O#..#...O.O.O...O..
|
||||||
|
.............#.#.#.O...#.#..#......O.#.O..#....#..##....#.##.##.#.O...O.O..#.#.#...OO....O..#O..#..O
|
||||||
|
.O.#.....O.O..O..##O...OO.#.O....#..#.#...O.O#...#O.O.OO...O..#..OO...O...O...O.....#.O..O#..#.#..OO
|
||||||
|
.....O..OO......#.#.#.O.##.OO...O..O.#..#...#OO....OOO......O.OO.#.O..O#O...O.#......OO##O.O.#O..O..
|
||||||
|
O##O.#.#..#..OO.O.........#O.#..O.#.##.O#..OOOO..#....O...O.........O..O..###...O...O.#.....O..##.O.
|
||||||
|
..O...#O#O.O...O.#..#O.......OO...........#...#..##.O......#..O.O.#OO.OO.#O....#.O.....O..#..#.#..#.
|
||||||
|
O#..O..##O#....O..OOO..OO...#O..O.O...O#O...OO.O##.O#O..#......OO##O.##...OOO.O..#....O##O..#......#
|
||||||
|
..#O...O..O.O...#..O.O...#O.....O.O......##OO#..O......#..O.#.O......OO.#O........O.....OO...O...O.O
|
||||||
|
........OO.#.OO..O......#...#...#..OOOO.OO.#....O.OO...O.##.....O.O....#O.#.OO..##.##..#.#O#.OO...O#
|
||||||
|
....#......#O.OO.....OOO....OO..O.O.O....##..O..O.O#.O....O.#O.#O.....O..O........#O.....O.O.....O#.
|
||||||
|
#.O#.O#......##.....O.#O...###...##....#O#.#.#....OO...O..#.O....O..#..#..O..........O......#.O.O...
|
||||||
|
.O.#..O#.OO....O.#...#O....#....OO......#O.O..#O..........O.#..#...#OOO........#.#.........O.#..O...
|
||||||
|
#OO.OO..O..O.O.#O.O.....O.##..#.O#..#.O....#........#.OOO#.#.....#.#.......O#..##..#.OO....O#O#.....
|
||||||
|
.......#O.O....#.OOO..OO...O...#....O..#.#....OO..O....O.#.O.#O#..O#.#.O..O......##...OO..#....O.#..
|
||||||
|
.O..O#.#OO.O.O.O.##...O..O.O..O.##O...#.O..O..O..O..O.....O...#..OO#O..O###...#...#....O##.OO...#...
|
||||||
|
#O....#...##..O..#...#OO.O.O.#......O...O.#.#O..O...O....OOO..O.O..O...O.OO...O...#..O....O#.###....
|
||||||
|
....#..O.....##.O.......##.##..OOO.O.#.#.....#....O..#..O....#....O...#.O..O#..O##...#.##....O.#OO##
|
||||||
|
O....O...OO.O........#..O...#..#.....O......O.O.OO.OO..#....O..O.............##.O.....##O#.OOO......
|
||||||
|
........#.O.####O.OO.#.O..O.O.#.#....OO#.......O..#....##.OOO..O.O.O..#.O.#...O.O.O..O.##O..O#....O.
|
||||||
|
...#....#.....O....O.O.O##.O..#O.OO...#.##.O..###OO##.O......#..##.OO...O.......O.......#..O.#.O..O.
|
||||||
|
.O.O...O......OO.#....#O..O.O.O..OO.O..O##O...O....O..OO.#..O....O..#.O..OO.OO....O#O..#.O..#O...#.#
|
||||||
|
..O#O.#O..#...##..#.O...OO..O#.......#..O........#.OO#..O#.#.#O....##...O.........O......OO#.....O.#
|
||||||
|
....OO.......###..O#.....O##..#O..#..#.O.....##.......##..O#O....#....#O.O..#..#..O.###O..#.O#......
|
||||||
|
O..##..O...#..O...O#OOO....#.O##O.#........#.O..O.#..#.OO.#O.#.....##.O..O.O....#..#..OO....#..#..##
|
||||||
|
.#...O.OO#O.O..O.##O..O#...##...O....OO.O#....#...#O.O#....O..........#....#............##.......#..
|
||||||
|
.O.#........##O...#O..O..O....OO#O....#.O..OO.##..O..OO#.###OO.....#..#.......O.#.....OO........OO.#
|
||||||
|
.OO...O.#..##.....OO..O.O.O.#.###.##.O.#..O..#..O..O...##.#......O....O.O.........O..#.O.O#O.#O...#.
|
||||||
|
#..#.#..O...##.....OO#O.OOO.....#...#.....##.#...O....O....#..OO#.#.OO....#.....O.O...O#.#..#..O#O.O
|
||||||
|
.O#.O.#..O..O#...OO...O...O#...O..O..#.O..#...O#.#....O......O#...O...OO.O##.#O....O....#OO....#O...
|
||||||
|
OO..OOO.O......OO...OO#O...#.#.#O.OOO#....#.OO#.#.O.#......O.O.OO#..O..#..O.O#.O#.O....O..O...O.....
|
||||||
|
...OO....O...#OO#..#..O.#O#....O.....OO.O.#.OO##.....#..O#.OO..#.#.O#..#..O.#..O....#....O.#O...OO#O
|
||||||
|
..#.......OO..##.O#...O#....O.#.O..##..#O.......#O#......O..O.........O#..#OO..O..#O.#.#.O.O#.#OO#.O
|
||||||
|
...#O#...O...OO...OO..OO...#OO...O...##.O....##.#O##.O....#..O#..O.....O.......###.#.OO#...O......#.
|
||||||
|
.O.OO#O##O##...#..#....#..#O...O#..O.O##......#........#O.........#.O....O..#..O.....O..#......O.#.#
|
||||||
|
..#....#.O.O.O..O.....O.O#O.O..#......O............O.........O#.O....#.O#..O..O.#OO.....#......O...#
|
||||||
|
OO...#..O..O##.#.#O.O.#.#....O....O...O.#..O##...O...#.O...#.O.OO...#........O#O..O.O.O..O.....#.O..
|
||||||
|
.OOO....#...O..O.....O..O...O...O..O...O#...#O....O.O...#..OO##.O.#..O..........O#..#..#..OO#.....#.
|
||||||
|
O..#..O#....#O..##O..#.#.......OO..O..#...O....O.#....O..O.##........O...O..OO...#....OO#..O.#.#.#..
|
||||||
|
O#O.O.O#.#OO#..OO.O.#......#.....#.......##.O..#.O..#..OO..O.#.#.O.O.O#.#......O....####OO#.#O#OO.#.
|
||||||
|
.#.....O#..O#O#..OO...#.O.#....#.#..##....O##....#.........##OO...##...O......#.OO...#O....O.O.O#O..
|
||||||
|
O......#.O....O...O.....OO.#....#O.##....#.O.O...O..#...O....#.O....O.O....#.OO.#.......#...#..#...O
|
||||||
|
...#OO..#......#..OO.O.O.##.O....O.##O##.OO#O.O.O..O.#O#O.OO...........O...###.#......O..#..#O#..OOO
|
||||||
|
O..O.#..O.OO.O...OO.OO..OOOO....O...#....##.OO.O.....#.......O.O........O.#.......#.......#..#.O..O.
|
||||||
|
.OO.##...#O..O#....O....#..O#....#.....O...O#.....OOO#.....................#..#..#..#O.......O.#OO..
|
||||||
|
.#OO..O....O..#.....#O...OO.#....#.#.O...O.#........O...O..O..OO#..#.....#.......OOOOO.OO....O....O.
|
||||||
|
.O#...#.......O.O...O.O.O#...OO.O#...O#O.O.#......#......O..O##.##.....O.....##...........O#...O....
|
||||||
|
.#.O.O#.....O.#..OO......#O.#..O..O.O.O..#.#...O##.#O..OOO......#...#..OO...O.#.....#O.OOO...#.O..##
|
||||||
|
.........O..##OO.#OOOO.O.O..OOO...OO.#.....#...O.#O##..O#..#.#..#...#..O.O...#OO.O...O...#O...#..#..
|
||||||
|
.#.#O.#...#OO.O.........O#..O...OO#.....O....OOOO#.....O.O....#...O...........O#.#.O..O.#.O.#.O.#.#.
|
||||||
|
......O.#...O.....O.O..O#...O.#........#.O...O.O....#..O#....O.#.O.O....O...#OO...#........OO..O.O.O
|
||||||
|
....O.O..OO.....#...OOOO.O#............O#OO....OOOOOO..#..#O#..#.#.O.OO.#O.....O.#......##..O#..#O..
|
||||||
|
..#......#...#O.#..#.#....OOO#...O.#....O..#O.....O.....O.O......O.......O.O..O..O.OO.O.#OO..O#...#.
|
||||||
|
.O.#.O.OO..O#.O#OO..........O.......O..#..#.#..O...#...##.....####...#........##O.......#....#...O##
|
||||||
|
........#.#.O.#O.......#O...O...#.#O..#OOO..#O..###...O.#.#O...O.O#..O..O...O.O....###.OO.#OO..O.#.O
|
||||||
|
..#O....#..O..####.O#...O....O.#O.##.O....O.O......O#O...OO###...O..#........#.#O.O#OO.......#.....O
|
||||||
|
....O.....#.#.O.#..O.#O.#.#O.#.......OO.....OOO...O.O..#.#....#..O.O..#.OO.O..O..OO##.....#.O..OO#O.
|
||||||
|
O#O..OO.O....OO.#O......O......#...#.....O.#OO.#.....OO..O#.O..O.O...#....O.O..OO.O....#....OO..O...
|
||||||
|
...O.....##....#....#....#......O#O..OO.....OO#O.OO......#OO.......O.#..###OO...#.O..OO.#.O.O#OO..#.
|
||||||
|
.O.#.O..#O.....#.#O....##OO.#O..##..##.##...#OO.O.#O#..O..O.O..O..##O.O.....O.OOO..#..#O..O#..OO...O
|
||||||
|
..##O#O.O.#.........O....O.OO#O#O.....O.....O#O.OO.O......O.O.OO......#.....O.O.O.O.O.....#.O.......
|
||||||
|
.....#OO.#O........O#....O.#OO.OO........#.O....O.OOOOOO.#.#O......O.#...O#.O.O..OO.....O.OO...#.O.#
|
||||||
|
.....#................OO..OOOO..#.....O.###O.O...O..#O..........OO.#...OO.O#...O......O..OOOO.#..###
|
||||||
|
O.....O...#O.#..........#O......O..OOO#....O.OOOO....O..#..#O....O.....O#..O..#.O.O....#OO.#....#O..
|
||||||
80
2023/go/day15/day15.go
Normal file
80
2023/go/day15/day15.go
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
package day15
|
||||||
|
|
||||||
|
import (
|
||||||
|
"adventofcode2023/utils"
|
||||||
|
_ "fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Lens struct {
|
||||||
|
label string
|
||||||
|
fl int
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part1(input string) int {
|
||||||
|
ans := 0
|
||||||
|
seqs := strings.Split(input, ",")
|
||||||
|
for _,seq := range seqs {
|
||||||
|
ans += hash(seq)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ans
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part2(input string) int {
|
||||||
|
Boxes := [256][]Lens{}
|
||||||
|
cmds := strings.Split(input, ",")
|
||||||
|
for _,cmd := range cmds {
|
||||||
|
if cmd[len(cmd)-1] == '-' {
|
||||||
|
label := cmd[:len(cmd)-1]
|
||||||
|
hash := hash(label)
|
||||||
|
nl := []Lens{}
|
||||||
|
for _, lens := range Boxes[hash] {
|
||||||
|
if lens.label != label {
|
||||||
|
nl = append(nl, lens)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Boxes[hash] = nl
|
||||||
|
} else {
|
||||||
|
tokens := strings.Split(cmd, "=")
|
||||||
|
label := tokens[0]
|
||||||
|
fl := utils.MustAtoi(tokens[1])
|
||||||
|
hash := hash(label)
|
||||||
|
nl := []Lens{}
|
||||||
|
if len(Boxes[hash]) == 0 {
|
||||||
|
Boxes[hash] = append(Boxes[hash], Lens{label:label, fl:fl})
|
||||||
|
} else {
|
||||||
|
found := false
|
||||||
|
for _, lens := range Boxes[hash] {
|
||||||
|
if lens.label == label {
|
||||||
|
nl = append(nl, Lens{label:label, fl:fl})
|
||||||
|
found = true
|
||||||
|
} else {
|
||||||
|
nl = append(nl, lens)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Boxes[hash] = nl
|
||||||
|
if ! found {
|
||||||
|
Boxes[hash] = append(Boxes[hash], Lens{label:label, fl:fl})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ans := 0
|
||||||
|
for i, box := range Boxes {
|
||||||
|
for j, lens := range box {
|
||||||
|
ans += (i+1) * (j +1) * lens.fl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ans
|
||||||
|
}
|
||||||
|
|
||||||
|
func hash(in string) int {
|
||||||
|
result := 0
|
||||||
|
for _, letter := range in {
|
||||||
|
result += int(letter)
|
||||||
|
result = result * 17
|
||||||
|
result = result % 256
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
17
2023/go/day15/day15_test.go
Normal file
17
2023/go/day15/day15_test.go
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package day15
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPart1(t *testing.T) {
|
||||||
|
r := Part1("rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7")
|
||||||
|
require.Equal(t, 1320, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPart2(t *testing.T) {
|
||||||
|
r := Part2("rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7")
|
||||||
|
require.Equal(t, 145, r)
|
||||||
|
}
|
||||||
1
2023/go/day15/input.txt
Normal file
1
2023/go/day15/input.txt
Normal file
File diff suppressed because one or more lines are too long
BIN
2023/go/day16/__debug_bin946177999
Executable file
BIN
2023/go/day16/__debug_bin946177999
Executable file
Binary file not shown.
202
2023/go/day16/day16.go
Normal file
202
2023/go/day16/day16.go
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
package day16
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "adventofcode2023/utils"
|
||||||
|
"adventofcode2023/utils/grid2d"
|
||||||
|
_ "adventofcode2023/utils/grid2d"
|
||||||
|
"adventofcode2023/utils/inputs"
|
||||||
|
"fmt"
|
||||||
|
_ "strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Tile struct {
|
||||||
|
object rune
|
||||||
|
energized int
|
||||||
|
}
|
||||||
|
|
||||||
|
type Beam struct {
|
||||||
|
dir rune
|
||||||
|
r int
|
||||||
|
c int
|
||||||
|
rm bool
|
||||||
|
}
|
||||||
|
|
||||||
|
var startBeams []Beam
|
||||||
|
|
||||||
|
func Part1(input string) int {
|
||||||
|
beams := []Beam{}
|
||||||
|
beams = addBeam(beams, Beam{'s', 0, 3, false})
|
||||||
|
grid := inputs.ToGrid2D[Tile](input, "\n", "", Tile{}, func(c string) Tile { return Tile{ object: rune(c[0]), energized: 0}})
|
||||||
|
return score(grid, beams)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Part2(input string) int {
|
||||||
|
grid := inputs.ToGrid2D[Tile](input, "\n", "", Tile{}, func(c string) Tile { return Tile{ object: rune(c[0]), energized: 0}})
|
||||||
|
G := grid.Matrix()
|
||||||
|
R := len(G)
|
||||||
|
C := len(G[0])
|
||||||
|
ans := 0
|
||||||
|
for r:=0;r<R;r++{
|
||||||
|
beams := []Beam{}
|
||||||
|
grid := inputs.ToGrid2D[Tile](input, "\n", "", Tile{}, func(c string) Tile { return Tile{ object: rune(c[0]), energized: 0}})
|
||||||
|
beams = addBeam(beams, Beam{'e', r, 0, false})
|
||||||
|
ans = max(ans, score(grid, beams))
|
||||||
|
beams = []Beam{}
|
||||||
|
beams = addBeam(beams, Beam{'w', r, C-1, false})
|
||||||
|
grid = inputs.ToGrid2D[Tile](input, "\n", "", Tile{}, func(c string) Tile { return Tile{ object: rune(c[0]), energized: 0}})
|
||||||
|
ans = max(ans, score(grid, beams))
|
||||||
|
}
|
||||||
|
for c:=0;c<C;c++{
|
||||||
|
beams := []Beam{}
|
||||||
|
grid := inputs.ToGrid2D[Tile](input, "\n", "", Tile{}, func(c string) Tile { return Tile{ object: rune(c[0]), energized: 0}})
|
||||||
|
beams = addBeam(beams, Beam{'s', 0, c, false})
|
||||||
|
ans = max(ans, score(grid, beams))
|
||||||
|
beams = []Beam{}
|
||||||
|
beams = addBeam(beams, Beam{'n', R-1, c, false})
|
||||||
|
grid = inputs.ToGrid2D[Tile](input, "\n", "", Tile{}, func(c string) Tile { return Tile{ object: rune(c[0]), energized: 0}})
|
||||||
|
ans = max(ans, score(grid, beams))
|
||||||
|
}
|
||||||
|
|
||||||
|
return ans
|
||||||
|
}
|
||||||
|
|
||||||
|
func max(a, b int) int {
|
||||||
|
if a > b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func score(grid *grid2d.Grid[Tile], beams []Beam) int {
|
||||||
|
fmt.Println(grid.StringWithFormatter(func(t Tile, x int, y int) string { return string(t.object)}))
|
||||||
|
G := grid.Matrix()
|
||||||
|
R := len(G)
|
||||||
|
C := len(G[0])
|
||||||
|
fmt.Println("r:", R, "c:", C, "tiles:", R*C )
|
||||||
|
for i:=0;i<1000;i++ {
|
||||||
|
beams = rmBeams(beams)
|
||||||
|
fmt.Println(i, ":", len(beams), ":", energy(G))
|
||||||
|
for i, _ := range beams {
|
||||||
|
r := beams[i].r
|
||||||
|
c := beams[i].c
|
||||||
|
if r >= 0 && r < R && c >= 0 && c < C {
|
||||||
|
G[r][c].energized++
|
||||||
|
switch beams[i].dir {
|
||||||
|
case 'n':
|
||||||
|
tile := &G[r][c]
|
||||||
|
switch tile.object {
|
||||||
|
case '.':
|
||||||
|
beams[i].r--
|
||||||
|
case '|':
|
||||||
|
beams[i].r--
|
||||||
|
case '-':
|
||||||
|
beams[i].dir = 'e'
|
||||||
|
beams[i].c++
|
||||||
|
beams = addBeam(beams, Beam{'w', beams[i].r, beams[i].c-1, false})
|
||||||
|
case '\\':
|
||||||
|
beams[i].dir = 'w'
|
||||||
|
beams[i].c--
|
||||||
|
case '/':
|
||||||
|
beams[i].dir = 'e'
|
||||||
|
beams[i].c++
|
||||||
|
}
|
||||||
|
case 'e':
|
||||||
|
tile := &G[r][c]
|
||||||
|
switch tile.object {
|
||||||
|
case '.':
|
||||||
|
beams[i].c++
|
||||||
|
case '-':
|
||||||
|
beams[i].c++
|
||||||
|
case '|':
|
||||||
|
beams[i].dir = 'n'
|
||||||
|
beams[i].r--
|
||||||
|
beams = addBeam(beams, Beam{'s', beams[i].r+1, beams[i].c, false})
|
||||||
|
case '\\':
|
||||||
|
beams[i].dir = 's'
|
||||||
|
beams[i].r++
|
||||||
|
case '/':
|
||||||
|
beams[i].dir = 'n'
|
||||||
|
beams[i].r--
|
||||||
|
}
|
||||||
|
case 's':
|
||||||
|
tile := &G[r][c]
|
||||||
|
switch tile.object {
|
||||||
|
case '.':
|
||||||
|
beams[i].r++
|
||||||
|
case '|':
|
||||||
|
beams[i].r++
|
||||||
|
case '-':
|
||||||
|
beams[i].dir = 'e'
|
||||||
|
beams[i].c++
|
||||||
|
beams = addBeam(beams, Beam{'w', beams[i].r, beams[i].c-1, false})
|
||||||
|
case '\\':
|
||||||
|
beams[i].dir = 'e'
|
||||||
|
beams[i].c++
|
||||||
|
case '/':
|
||||||
|
beams[i].dir = 'w'
|
||||||
|
beams[i].c--
|
||||||
|
}
|
||||||
|
case 'w':
|
||||||
|
tile := &G[r][c]
|
||||||
|
switch tile.object {
|
||||||
|
case '.':
|
||||||
|
beams[i].c--
|
||||||
|
case '-':
|
||||||
|
beams[i].c--
|
||||||
|
case '|':
|
||||||
|
beams[i].dir = 'n'
|
||||||
|
beams[i].r--
|
||||||
|
beams = addBeam(beams, Beam{'s', beams[i].r+1, beams[i].c, false})
|
||||||
|
case '\\':
|
||||||
|
beams[i].dir = 'n'
|
||||||
|
beams[i].r--
|
||||||
|
case '/':
|
||||||
|
beams[i].dir = 's'
|
||||||
|
beams[i].r++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
beams[i].rm = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(grid.StringWithFormatter(func(t Tile, x int, y int) string { if t.energized > 0 {return "#"}; return "."}))
|
||||||
|
}
|
||||||
|
fmt.Println(grid.StringWithFormatter(func(t Tile, x int, y int) string { if t.energized > 0 {return "#"}; return "."}))
|
||||||
|
return energy(G)
|
||||||
|
}
|
||||||
|
|
||||||
|
func rmBeams(slice []Beam) []Beam {
|
||||||
|
var result []Beam
|
||||||
|
|
||||||
|
for _, value := range slice {
|
||||||
|
if ! value.rm {
|
||||||
|
result = append(result, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func addBeam(beams []Beam, beam Beam) []Beam {
|
||||||
|
for _, value := range startBeams {
|
||||||
|
if value == beam { return beams }
|
||||||
|
}
|
||||||
|
startBeams = append(startBeams, beam)
|
||||||
|
for _, value := range beams {
|
||||||
|
if value == beam { return beams }
|
||||||
|
}
|
||||||
|
return append(beams, beam)
|
||||||
|
}
|
||||||
|
|
||||||
|
func energy(G [][]Tile) int {
|
||||||
|
ans := 0
|
||||||
|
R := len(G)
|
||||||
|
C := len(G[0])
|
||||||
|
for r:=0;r<R;r++ {
|
||||||
|
for c:=0;c<C;c++ {
|
||||||
|
if G[r][c].energized > 0 {
|
||||||
|
ans++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ans
|
||||||
|
}
|
||||||
68
2023/go/day16/day16.py
Normal file
68
2023/go/day16/day16.py
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
from copy import deepcopy
|
||||||
|
from math import gcd
|
||||||
|
from collections import defaultdict, Counter, deque
|
||||||
|
D = open(sys.argv[1]).read().strip()
|
||||||
|
L = D.split('\n')
|
||||||
|
G = [[c for c in row] for row in L]
|
||||||
|
|
||||||
|
R = len(G)
|
||||||
|
C = len(G[0])
|
||||||
|
|
||||||
|
DR = [-1, 0, 1, 0]
|
||||||
|
DC = [ 0, 1, 0,-1]
|
||||||
|
|
||||||
|
def step(r,c,d):
|
||||||
|
return (r+DR[d], c+DC[d], d)
|
||||||
|
|
||||||
|
def score(sr,sc,sd):
|
||||||
|
POS = [(sr,sc,sd)]
|
||||||
|
SEEN = set()
|
||||||
|
SEEN2 = set()
|
||||||
|
while True:
|
||||||
|
NP = []
|
||||||
|
if not POS:
|
||||||
|
break
|
||||||
|
for (r,c,d) in POS:
|
||||||
|
#print(r,c,d)
|
||||||
|
if 0<=r<R and 0<=c<C:
|
||||||
|
SEEN.add((r,c))
|
||||||
|
if (r,c,d) in SEEN2:
|
||||||
|
continue
|
||||||
|
SEEN2.add((r,c,d))
|
||||||
|
ch = G[r][c]
|
||||||
|
if ch=='.':
|
||||||
|
NP.append(step(r,c,d))
|
||||||
|
elif ch=='/':
|
||||||
|
# up right down left
|
||||||
|
NP.append(step(r,c,{0:1, 1:0, 2:3, 3:2}[d]))
|
||||||
|
elif ch=='\\':
|
||||||
|
NP.append(step(r,c,{0:3, 1:2, 2:1, 3:0}[d]))
|
||||||
|
elif ch=='|':
|
||||||
|
if d in [0,2]:
|
||||||
|
NP.append(step(r,c,d))
|
||||||
|
else:
|
||||||
|
NP.append(step(r, c, 0))
|
||||||
|
NP.append(step(r, c, 2))
|
||||||
|
elif ch=='-':
|
||||||
|
if d in [1,3]:
|
||||||
|
NP.append(step(r,c,d))
|
||||||
|
else:
|
||||||
|
NP.append(step(r, c, 1))
|
||||||
|
NP.append(step(r, c, 3))
|
||||||
|
else:
|
||||||
|
assert False
|
||||||
|
POS = NP
|
||||||
|
return len(SEEN)
|
||||||
|
|
||||||
|
print(score(0,0,1))
|
||||||
|
ans = 0
|
||||||
|
for r in range(R):
|
||||||
|
ans = max(ans, score(r,0,1))
|
||||||
|
ans = max(ans, score(r,C-1,3))
|
||||||
|
for c in range(C):
|
||||||
|
ans = max(ans, score(0,c,2))
|
||||||
|
ans = max(ans, score(R-1,c,0))
|
||||||
|
print(ans)
|
||||||
37
2023/go/day16/day16_test.go
Normal file
37
2023/go/day16/day16_test.go
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package day16
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPart1(t *testing.T) {
|
||||||
|
r := Part1(
|
||||||
|
`.|...\....
|
||||||
|
|.-.\.....
|
||||||
|
.....|-...
|
||||||
|
........|.
|
||||||
|
..........
|
||||||
|
.........\
|
||||||
|
..../.\\..
|
||||||
|
.-.-/..|..
|
||||||
|
.|....-|.\
|
||||||
|
..//.|...`)
|
||||||
|
require.Equal(t, 46, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPart2(t *testing.T) {
|
||||||
|
r := Part2(
|
||||||
|
`.|...\....
|
||||||
|
|.-.\.....
|
||||||
|
.....|-...
|
||||||
|
........|.
|
||||||
|
..........
|
||||||
|
.........\
|
||||||
|
..../.\\..
|
||||||
|
.-.-/..|..
|
||||||
|
.|....-|.\
|
||||||
|
..//.|...`)
|
||||||
|
require.Equal(t, 51, r)
|
||||||
|
}
|
||||||
110
2023/go/day16/input.txt
Normal file
110
2023/go/day16/input.txt
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
\.......................\..........................................-..................-.../................-..
|
||||||
|
....../.......\...-......-.|...\..............\.................|............././....-........................
|
||||||
|
...............-...-........................................\......\..-.............|......-....\....-........
|
||||||
|
..\..|.|...........................-.|........................................./.|....|................|......
|
||||||
|
|../................|............................................................\........../..\..............
|
||||||
|
........\............../................/..........................\...\....|............./....-.........\\...
|
||||||
|
.................-...-...................\../........-|.................../......-...........|................
|
||||||
|
........-............/...|-............-.....\.|..............-....-../\../..................\...\././........
|
||||||
|
........................-|................................................................-........-..........
|
||||||
|
-......./.................|.....\.................\.....//............-........./..../....|...................
|
||||||
|
....-.............-........-..........-|.......|...../...\...................\.....................|..........
|
||||||
|
...|...\.........|.................|.....|....-....\.......\./........................-.../..../.....-........
|
||||||
|
....|....-.-..............\.........|.......................-.......-..............\................/.........
|
||||||
|
.....|.\...........-.................-.-........../...\............|...............|...|......./.......|...../
|
||||||
|
.....\.........................-.../..-./...\...................../......\...-.......|.\........-|............
|
||||||
|
............|.....................................-....../....\.............../-...|...\..\................./.
|
||||||
|
......-./|....../............|.........\............-../...-......./.\..\....../......|/...\..................
|
||||||
|
................................|.......|..-..../.............................../.-..................-..-/..|.
|
||||||
|
...............................-......./......................|./...............-............./....../........
|
||||||
|
..................../....................\........\...........................-............/.../..............
|
||||||
|
.|||......../.................|.................../..\............................-......./..|...|/.-.........
|
||||||
|
......-......./\....../.........|....../.......-...............|.\........-............/.../..................
|
||||||
|
.....................-.\/|................//.../.........|.|......\.-..|.........|.........\..................
|
||||||
|
.........................\/.......|.|............................|........|.............................././..
|
||||||
|
.................................|.................\../..|/.................\.................-...-........-/.
|
||||||
|
......................-...-.........../...........................\....\......-..-.......\.-....\....|........
|
||||||
|
......-......../..............\/..................\..|........-..............|...-...../......|...............
|
||||||
|
|.......|.../....|..............//.....................|..........|/......../................|................
|
||||||
|
...|.|..................../|..../.-.......-...........|.....|./....\......-......-................|...........
|
||||||
|
......\/./.|\..../|.|..|..........-....|...........|.-.|...................-.\.....|....................\.....
|
||||||
|
......../.\......................|.....|...........|.........../.......|....|...|.......-......../......\...-.
|
||||||
|
...|...-...||......-..|..-...........|.-.................|.................................-..................
|
||||||
|
..............-.\.-........|......\..........................................\./.\........../.....|...........
|
||||||
|
../\.........|...............|............|.\/.-/.................-....|...-.................-.....|..../.....
|
||||||
|
....................../......../..../-.....\........................\..-.\....|....-.........../-.............
|
||||||
|
.................................|................|.........|................../|.....|....\\............/.\..
|
||||||
|
...///./.....\.................|/.....................\...................-............|................|.....
|
||||||
|
............-...........................--........\................/.............-\................\.....-.../
|
||||||
|
...............\.........../|............................|.....................\...-...\.....................-
|
||||||
|
...\.............|.............|................\............\|...../...|.........................|...........
|
||||||
|
..................|......|..........-.-..............\.........................\..............................
|
||||||
|
....-................../.........../...|................/...............|./.|.../....\..../......./......//...
|
||||||
|
...../....../..............................|...\../..........-..........-........-..//..../...................
|
||||||
|
...............-......|......................|./........./............/..-...........|../.....-........-./....
|
||||||
|
..\.........................|...-.......\.................|..............-........\....-.............-....|...
|
||||||
|
.......|......|....../........\...........|......-........../......-..................../....................\
|
||||||
|
.......................|....-..|........./.|.-...............|..\......\.....-.......\...-/....|/.........\...
|
||||||
|
\......\..-.....................\..........................\................................../...........\...
|
||||||
|
-....-......../............................................................../.\.......|..............|....-..
|
||||||
|
........|......................|.............-....\................................./..\.......|..........-...
|
||||||
|
...-...............|........./......\...../.......|...|...............\.../...\.../......|.....-.\......\.....
|
||||||
|
............./.....|......................|.....................................\...||.................-....|.
|
||||||
|
./.....-................/........|./....-......../......./..............\..................................\..
|
||||||
|
.../..../\........-..........................|.-/.|..\................\\-.......|......./...||.......|........
|
||||||
|
.....-.........................-...............\...........|.............-.\.../.|......-.|......../...-.....-
|
||||||
|
......\....................|...../......................|.../......-..|............|......./.../.........|....
|
||||||
|
...|...........-....................................../.|............./....|..../........./.....\../..........
|
||||||
|
....../.../................\........................\...\....\......\............../|...............\.-.......
|
||||||
|
./....\.../.............|............................-.../............../............/...........\...|........
|
||||||
|
............................|.................|/..........//.........../..-...............|...................
|
||||||
|
.....\......\.................|.....|...\-./...............\................|....../.....-..\........-....-...
|
||||||
|
........................./-........\................./........-/.|....-.......\............-/\......|.\...-...
|
||||||
|
..../../..|.|...............\.......................................-.........................................
|
||||||
|
...........|...................................................-...-......|..................\............../.
|
||||||
|
/....|......................................................................|\.../.......-...........-...|....
|
||||||
|
......|.-.\......-........|.....-..|.\..............-......./......-|.........................-...............
|
||||||
|
............\......................................|........................|.-...............................
|
||||||
|
.........-.........../....\./....../.-...-..//.........../.......\\...........................................
|
||||||
|
........\......../............./...-......\.../..|..|............................../......../..\..............
|
||||||
|
--.........|.....-...|............../...|.......|..............\|............|.........................|.-....
|
||||||
|
-\......./..............-....-....\...|.-........\/.\./............-/...\........|-.........../../...\........
|
||||||
|
.\|\..............-......-.\...-....\..........................\........|...........-......./.............../.
|
||||||
|
..........................|...\..../.../..........\.............-...//...............\..................-.....
|
||||||
|
........./..........................\............|-.....|..-...|......../........-...........................\
|
||||||
|
.......\.../.....\....../.......|..|...............-......................|....-...................-.|........
|
||||||
|
......|.......\.../..............................-..............................|......-.-...................\
|
||||||
|
/.....|.......-............/|.....|-......./..../......-........../..|......../.-..\..../....../...|..........
|
||||||
|
............/..--..........-............\.......\................\........................../../....|.........
|
||||||
|
..|..-................|.|..|................/.......\............-//.......................\..\...............
|
||||||
|
.......................-......-..................|....\................-......\.|....\....|..../../|.-........
|
||||||
|
........................-..................-...........................-..-................-................|.
|
||||||
|
/.\....|.-.................................\..-.....\./.........../-.|..............\..\.....--|/....\........
|
||||||
|
.......-..-../..................\..--|..............|...............|\........|...--................|./.\.....
|
||||||
|
..........|................-.......|..................................................|...................|...
|
||||||
|
-.-..|....-.|........-./...|.-.........\.....\/........-........\........../................./.../........\...
|
||||||
|
..................../...|/......................................../............\.|./../................/\|....
|
||||||
|
...//.........................\....../..............\../.......-..\....|......................................
|
||||||
|
............................./..|./../.........-/..\..........................................................
|
||||||
|
......\.....|..................|..................\.....\.-..\...../............................../...........
|
||||||
|
..........\...........-..........-.....-....\/................../.................................\.....|..\..
|
||||||
|
..../.\...................................\............\...\....|.................|.....................-.....
|
||||||
|
...........-...........................\.......|-../.|....|.....|......................-...../................
|
||||||
|
.......|.........\..............|....\...-......../...........-.....-..-...........-..................\...\.|.
|
||||||
|
...........|.......................|....-..........\............................\.................../.\.......
|
||||||
|
..../.................\.......-..|.................../........................|...............\...........-.|.
|
||||||
|
............./..|.-\..../.....-............-....|..\......|......../............-.........|................\..
|
||||||
|
...................\...\/......\............|......................\....|...................-./-..............
|
||||||
|
..-\...........|.................../.....|....|............................-..|............\.............\....
|
||||||
|
.|.....\....\........|..................\...............|..-/.........|.-/...........-............-...........
|
||||||
|
.....\...../......-............|........./..|............-........................\....-......................
|
||||||
|
......\......../........|..............\...-..-...|.......................................................|...
|
||||||
|
...................|.................................\.....\...........................|../.|.-......-........
|
||||||
|
..................|..............\.....\............|........../....../...............\.........\.............
|
||||||
|
..|...........-..../....\.........--...\................../.............-...-....................-..../....|..
|
||||||
|
.|...\...................|......-...........-\..........\.....|.....|..........|.........|....|-../...........
|
||||||
|
.............\|...................../\...............\....../.......-....\.....................-..............
|
||||||
|
.......//.....................\....\......\......\.........|...................../......../.........\......-..
|
||||||
|
.\./.........-...-./-.\.............../......|................................\|....\...../....-..............
|
||||||
|
.......|......../......../......./.........../...............|............................../..|......../.....
|
||||||
|
............./.........|.....-./.........../....-......./|......-................|............................
|
||||||
@@ -20,6 +20,9 @@ import (
|
|||||||
"adventofcode2023/day11"
|
"adventofcode2023/day11"
|
||||||
"adventofcode2023/day12"
|
"adventofcode2023/day12"
|
||||||
"adventofcode2023/day13"
|
"adventofcode2023/day13"
|
||||||
|
"adventofcode2023/day14"
|
||||||
|
"adventofcode2023/day15"
|
||||||
|
"adventofcode2023/day16"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -70,6 +73,15 @@ func main() {
|
|||||||
case 13:
|
case 13:
|
||||||
fmt.Printf("part 1: %d\n", day13.Part1(utils.Readfile(d)))
|
fmt.Printf("part 1: %d\n", day13.Part1(utils.Readfile(d)))
|
||||||
fmt.Printf("part 2: %d\n", day13.Part2(utils.Readfile(d)))
|
fmt.Printf("part 2: %d\n", day13.Part2(utils.Readfile(d)))
|
||||||
|
case 14:
|
||||||
|
fmt.Printf("part 1: %d\n", day14.Part1(utils.Readfile(d)))
|
||||||
|
fmt.Printf("part 2: %d\n", day14.Part2(utils.Readfile(d)))
|
||||||
|
case 15:
|
||||||
|
fmt.Printf("part 1: %d\n", day15.Part1(utils.Readfile(d)))
|
||||||
|
fmt.Printf("part 2: %d\n", day15.Part2(utils.Readfile(d)))
|
||||||
|
case 16:
|
||||||
|
fmt.Printf("part 1: %d\n", day16.Part1(utils.Readfile(d)))
|
||||||
|
fmt.Printf("part 2: %d\n", day16.Part2(utils.Readfile(d)))
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("no such day: %d", d))
|
panic(fmt.Errorf("no such day: %d", d))
|
||||||
}
|
}
|
||||||
@@ -77,7 +89,7 @@ func main() {
|
|||||||
|
|
||||||
// Reads day from os.Args.
|
// Reads day from os.Args.
|
||||||
func day() int {
|
func day() int {
|
||||||
latest := 12
|
latest := 15
|
||||||
if len(os.Args) == 1 {
|
if len(os.Args) == 1 {
|
||||||
return latest
|
return latest
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user