Compare commits
No commits in common. "main" and "graphs" have entirely different histories.
|
@ -1,6 +0,0 @@
|
||||||
-----BEGIN SSH SIGNATURE-----
|
|
||||||
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgZ+OuJYdd3UiUbyBuO1RlsQR20a
|
|
||||||
Qm5mKneuMxRjGo3zkAAAAEZmlsZQAAAAAAAAAGc2hhNTEyAAAAUwAAAAtzc2gtZWQyNTUx
|
|
||||||
OQAAAED8T4C6WILXYZ1KxqDIlVhlrAEjr1Vc+tn8ypcVM3bN7iOexVvuUuvm90nr8eEwKU
|
|
||||||
acrdDxmq2S+oysQbK+pMUE
|
|
||||||
-----END SSH SIGNATURE-----
|
|
|
@ -1,11 +0,0 @@
|
||||||
...........
|
|
||||||
.....###.#.
|
|
||||||
.###.##..#.
|
|
||||||
..#.#...#..
|
|
||||||
....#.#....
|
|
||||||
.##..S####.
|
|
||||||
.##..#...#.
|
|
||||||
.......##..
|
|
||||||
.##.#.####.
|
|
||||||
.##..##.##.
|
|
||||||
...........
|
|
|
@ -1,131 +0,0 @@
|
||||||
...................................................................................................................................
|
|
||||||
.#.......#..#...#.......#......#....#..#...#...#....#.#..........................................#...............#..........#......
|
|
||||||
.............##..................#......#.#....#.......................##..#........................#......#..........#............
|
|
||||||
......#..........................#....#.....#.............#................##....#.#.............#.........#.##...........#........
|
|
||||||
.#................#............................#...........................#..##.....#..................#..##..#.#.........##......
|
|
||||||
.....#.............#.....##.............##..........#...........#.............#.....#...........#.#.......#....#......#..........#.
|
|
||||||
........#....................#....#.#.#......##........#...........#...........#..........#...#..........#......................#..
|
|
||||||
.........#.#...#.......#........#........##...#...#..##........................................##...#.#........................#...
|
|
||||||
......#.....#..#..#.#..#..............#...#..#.....#...........#.....#........#.#...........#...........#.#...............#.....#..
|
|
||||||
...........#.......####..#.#..............##................#.#.#.....................##.....................#...#..............#..
|
|
||||||
......###...#......#................##...#...#....#...........#...#..............#.........#..#..................................#.
|
|
||||||
...............#..##..........#...........................##......#.##.........................#..#.#...........#.#...........#....
|
|
||||||
...##........#...#...#...##...##...........#..#...................#...................#.#..#.........#.......#..#...........##...#.
|
|
||||||
................#.....#..##......#.....#.....##............#..#..........##...........................#.#.......##.....#.....#.....
|
|
||||||
.#..#.......#.#...#..##.....#............................#......#...#....#................#.#..#.....#.......##................#...
|
|
||||||
...............#.....#........................#..........#.....#..............................................#..................#.
|
|
||||||
.....#......#..........................................#....................................#..#.......#.#..#......#.#....#..##....
|
|
||||||
............##............#.......###.......................#..#....#......................................#..#.........#..........
|
|
||||||
..#...............#.....#...#...#......................#...#.#..............................#.#..#.#.....#.#.#..#....#.....#...##..
|
|
||||||
.#.............................##.................#.......#.......##....#....................#.....#.#........#.....#........#.....
|
|
||||||
.#....##...................##.....#.#..............#.#....#....#..#....#......#..........#.....##............#....#.............##.
|
|
||||||
.........#....#.....#..#.........#....#.#..........#...#...#.......#....#..##.......................#.#..#........#..#....#..#.#...
|
|
||||||
..#..................#.......#..#.#..............##.......#........#..............#.........#..#....#......#..#..........#.........
|
|
||||||
........#.....#......#.....#......#...#.......#....#.......#.#..#................#....................##.............#.......#.....
|
|
||||||
..#.................#..............#...........................................#.....#..................#...#.#..................#.
|
|
||||||
.......#......#.....#...........................#.....#..................#.....................#.....#.#......#........#.#.......#.
|
|
||||||
..#.#.#...................#...#..#................#....#.......#......................#...............#.........##...#.#.....###...
|
|
||||||
.....#...#....##....#........####...........#.................#...#...........................................#..............##....
|
|
||||||
..##.#..#.#..........#.#.#..#................................#..#.............#..#......#...........................#.##...........
|
|
||||||
..............#.............................##........#..##........................#.............................#........#........
|
|
||||||
........#.........#........#..#........#..#........#...#.#........#...........#.........................#.#..........#...#......#..
|
|
||||||
.........##.....#........#.....................#..#.............#.....#........#....................#....#.#.#......#.....#........
|
|
||||||
......................#...................####..#.........#....#.........#...........#..................#..#.................#.....
|
|
||||||
..#.........#...#.....##................##.##....#.....#....#..............................#..#.............#..#...................
|
|
||||||
..........##......#..#..............#.#....#......#................#.....#....#..............#..................#..................
|
|
||||||
.#.#..####...#....................#.#.#.....#...#...................#....#.#.....#.#.......#.#...........#......#.#................
|
|
||||||
.......#.........#..#.#..............###.......#....#.........................#.......#.###...#............#....#.#..#....###.#....
|
|
||||||
........#....#...#......#.................#..........................#.........................#...........##.............#.#......
|
|
||||||
.#..............#.....................#......#.............##............#..#..........#...................#...#....#..............
|
|
||||||
......#..#..#.#...............#........###.......#.#...........#...........#.#.........#..#.....................#......#..#.#......
|
|
||||||
.....#...............#.........#....#..........#.......#.......#......#...#..##.....#.....#........#.#.......#.......#..#...#......
|
|
||||||
..#............#.....................#...#.......#....###...........#.....#.#.................#................#.........#..##.#...
|
|
||||||
..............................#.....#..................................#.....##...............#.......#.........#.....#....##......
|
|
||||||
..#...##...#...#..............#.................##..#......#.................#....#......#...#...#......#..........................
|
|
||||||
.........#....#..............#........#..#...............#....#...#.....#..#......#.........#.......#.#..#........#...........#....
|
|
||||||
........#..#....................#.........#...##.#.#..............#......#.#..........##...##....#......................#..........
|
|
||||||
.##..#....#....#.......##......#............#..#......#.....##..................#####..#...#......#.#...#..........#.#.....#..#....
|
|
||||||
..#...........#....................#.......#......#.........#...............#......#........##........#.................#.....#.#..
|
|
||||||
..#....#.#...............#.#.........................#.............####..............................##................###.........
|
|
||||||
.....#.......................................#....#...##...#.......#.......#.....#.##..##.................#.....................##.
|
|
||||||
.........#...........#..#..##.#..........#..#.........#..#.....#...................................##....#...............#..#.#....
|
|
||||||
.....#..#...........##............#........#..................#............#..........#..........#..#...........#..................
|
|
||||||
............................#.........#...............#..................#.#....#.#..#........#.....#...........#...........#......
|
|
||||||
................#...##.#....#..##..........#.#........##.#..#..#.....................#....#.................#.#...............#....
|
|
||||||
.#.....#..............#.#..........#..#........#...............#..#.#..##..#.#.#.........................#.................#.......
|
|
||||||
....#..............#................#.....#..#.......#..#.#.........#..........#..........#.....#..........##.....#............#...
|
|
||||||
..............##...........#.......#......#..................#.......#.....#.#...#...............#.#........#......#............#..
|
|
||||||
................#.....#....#........#....#.......#.#.##.....#...#..#.##...#................#.#.....#....#.............#............
|
|
||||||
...........#.#.##..####.....#....#.#...#.#...........#...#.......................#.#....#.....#..#................###..............
|
|
||||||
...................#....#..........#.#..##.....#..#..#......###............#..#...........#....#......#............................
|
|
||||||
...........................................#.......#..............#.##.......##.......#...#.....#.#..#.....#..###..................
|
|
||||||
............###........#.......#.#....#.....#....#..#........#.........##....#.....#..........#......#............#..#.#...........
|
|
||||||
............#..........#................##.#..............#.....#................#....................................#..#.........
|
|
||||||
...........#.....#.....................#...#.....#.......#..........#....#.....###.....##.#.##.#.....#......#......#.......#.......
|
|
||||||
.....................#..#.....#...##.....#..#...........#....#....##............##.................##............##................
|
|
||||||
.................................................................S.................................................................
|
|
||||||
........#.#........#..........#.....#......#........#.#............#.#.........##...#............#...#.....#...........#.....#.....
|
|
||||||
..................##.......#......#..#..................#..##......#.........#...#.........#............#....#...........##........
|
|
||||||
..................#...........#.##.......#..............#....................#.#....#...##...#.....#.......#..#.....##.............
|
|
||||||
...........#....#....##...#................................#.........#.................#....#.......................#...#..........
|
|
||||||
.............#.#.#.....#.#...#.......#.#...........#....#.#.........#........##......#.......#.......##...#..........#.##..........
|
|
||||||
...........##.#....#....#..#.....#...............#......................#...........#.....#...........#.#.......#..................
|
|
||||||
.#.......................#.#...##.#....#.#...........#.#....##.##......#........................##....#.#....#.....................
|
|
||||||
...#..................#.#...........##....###.................#....................##......#.....#............#.##....#.......##...
|
|
||||||
.#..................####...#.#..#.##.#...####...#......#....................#..........................#....#......................
|
|
||||||
.....#..........#.....#.#...............#.........##...#......#.#.....#...........#.....#............##......#.....#...............
|
|
||||||
......#........#....#..#............................###.#...##........#........#.................#..#........#...............##....
|
|
||||||
......................#.........................##....#...#..............#..#............#.#....#......##.#......#.........##......
|
|
||||||
..................#....#...#.#.......#..............#..#..#...#.......#...#.....#.....#...............#.#.#...............#........
|
|
||||||
...#...##......................##..##...........#......#.............#............#...........##.......#....#......................
|
|
||||||
.............................##...........##...#...#.....#....#.......#.#..#.....##...............#..#.#......#..............##....
|
|
||||||
...#..#.#...#.......#..................#............#....#.#.##.#.........#......#........#..#..........#....##...........#....#...
|
|
||||||
.....#.............................#......#.#.....#.##.#.................#.........#..#..#.#.#........................#.#.......#..
|
|
||||||
....#........#........#....#.#.#.....#.##............###.#..........#...##......#........##...#.........#.............#........#...
|
|
||||||
..#..............................#.............................#......#...................#...#......#.............#...............
|
|
||||||
.......#...#...............#.................##....................#....##.......#....##....##...#..................#..............
|
|
||||||
.........................#...#..#.....##.............#...##.......#.....#...#..............#.....#.#.#..#........................#.
|
|
||||||
......#.......##.#.............#....................#...#...........#...#..##....#.....#............#...........#........#.........
|
|
||||||
...#....#...#......#........................#.....#.........#......#........#.....#.#...........#.#..............#......#....#.....
|
|
||||||
........#..........#...................#...........##.#..#...#................#....##.............#................#....#..........
|
|
||||||
........#.......#....#.............#..........#...................#.#....#.#........#..#..............................#..........#.
|
|
||||||
............#........#....................#.#.........#......#.............#................#...#.............#....#...............
|
|
||||||
..#..............................#..#....##.....#......................##...#..#.........#......#......................#...#...#.#.
|
|
||||||
.##....#.............#...........##..................#...#..............#.......#................................#.........#.......
|
|
||||||
.....#......#.#.....##...........#.....#.......#..........##..#.............#.#.........#.#.#.............##........#......#..#....
|
|
||||||
.......#.......#.#.#..#......................#....#............##....#...........#.........................#......#................
|
|
||||||
.........##.........#..............#.#.#....#...#.......#.................................#..##..................##.###.##...#.....
|
|
||||||
......................#...#.#.......#..#.#..........#........#.......#.................#..................................#........
|
|
||||||
....##........#.........#.........................#................#......#...#.....#..................................#..#.#......
|
|
||||||
...##..............#..................#...#......#........###..#.......#..........#..............................#......#..........
|
|
||||||
.#.#.#....#..........#......#.#.........#.....#...............................#.....#.#............#....#........#.............#...
|
|
||||||
........#.........#.........#......................#..#......##.....#..#..........................#......##....#......##.##.....#..
|
|
||||||
.##...#.......#.#....#..#.#...................#.........#....#...........#.....#.........#............##......#............#.......
|
|
||||||
.##..#.........#..........#.#.................................#.#.#...............................#............#......##...#.#.....
|
|
||||||
......#........#..#...#............#..............#............#......##.....#.................................#......#.#.....#....
|
|
||||||
..........#........#...........#....................................#.....#...............................#............##....#.##..
|
|
||||||
........#.............#..#......##..................#.............#..#...#.#.....#...#...............#........................#....
|
|
||||||
....#...............#..........#....#...........................#....##.##...................#.#.......#...#.##....#........##..#..
|
|
||||||
......#.....#..#..........###...#.................####.###..........#...........#..........#......#............................#...
|
|
||||||
.#...#......#........#..#............##...............#.##......#...#.....#....................#.........#............#...#........
|
|
||||||
................##...................#.##..............#...#..#.......#.......###........#..#..#........#...##.....................
|
|
||||||
..............#....#..#..#.............##..............#................................#.....#..#....###.##..............#........
|
|
||||||
..#..............#........................................#..........#.....#..................#............#..#....................
|
|
||||||
.........#...#.....#...#...##...........#.###............##...#........#......................##......#....#.......#...............
|
|
||||||
....#....#.....#.......#......................................#.#.#....#..#..#..........#...................#........#...#.........
|
|
||||||
..#..#..................#..............#...#..#.........#......#....#.#................##..........#..#................#...........
|
|
||||||
...#...................#...........#....#...#.............##...#.......#.#..........#..#...............#....#....#.............#...
|
|
||||||
.......................##.#.#..##........#....#.........#.#.#.....##..............#.......#.......##.#..........#.#................
|
|
||||||
.....#..#..................#..##....#.......#.............#...#.....#.............#.............#.#...............#.....##......##.
|
|
||||||
...#.#.....#..........#.#............#..#..........................##.............#....#.......#.#...#...#....................#.#..
|
|
||||||
............##.#............#....#....#....#..##...#...............................#...#...#.........#.......................##.##.
|
|
||||||
....#.#...............#...#.......#............#..#...........................#..............#..........#....#...#...#..#...#....#.
|
|
||||||
.......#..#..#.#..#......#..........................#...............#.........#...........#................#..#...#................
|
|
||||||
...#..#...#.....#.#.......#....................................................#........#..........#.#...#......#..........#.......
|
|
||||||
..#...#.......#..#..............#.#...#.....#...#....#............#..........##...#.........##.............#.......................
|
|
||||||
...#.............#...#....#...#.....#.#.#..............#..........#........#........##...........#..#.#......................#.....
|
|
||||||
.#.......#.................#...............#..........#.....................#.....#............#......##....#.....#...#....###.....
|
|
||||||
...##...........#..........#.#........#............#..#.#........................#.....##............#...##.#.......#.##....#......
|
|
||||||
...........#........#...........#.......#......#...#.....#............................#........#..#................#...#....##.....
|
|
||||||
...##.##.........#.####..#............#..#.....#.......................#......#..........#.#..#.#....##........#....#.....#..#..##.
|
|
||||||
...................................................................................................................................
|
|
|
@ -1,99 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
_ "embed"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
aoc "go.sour.is/advent-of-code"
|
|
||||||
)
|
|
||||||
|
|
||||||
// var log = aoc.Log
|
|
||||||
|
|
||||||
func main() { aoc.MustResult(aoc.Runner(runner(64))) }
|
|
||||||
|
|
||||||
type result struct {
|
|
||||||
valuePT1 int
|
|
||||||
valuePT2 int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
|
||||||
|
|
||||||
func runner(rounds int) func(scan *bufio.Scanner) (*result, error) {
|
|
||||||
return func(scan *bufio.Scanner) (*result, error) {
|
|
||||||
var garden garden
|
|
||||||
|
|
||||||
for scan.Scan() {
|
|
||||||
txt := scan.Text()
|
|
||||||
garden.m = append(garden.m, []rune(txt))
|
|
||||||
|
|
||||||
for i, c := range txt {
|
|
||||||
if c == 'S' {
|
|
||||||
garden.start[0] = len(garden.m) - 1
|
|
||||||
garden.start[1] = i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
garden.Step(rounds)
|
|
||||||
return &result{
|
|
||||||
valuePT1: len(garden.steps[len(garden.steps)-1]),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type garden struct {
|
|
||||||
start aoc.Point[int]
|
|
||||||
m [][]rune
|
|
||||||
steps []aoc.Set[aoc.Point[int]]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *garden) Neighbors(p aoc.Point[int]) []aoc.Point[int] {
|
|
||||||
var neighbors []aoc.Point[int]
|
|
||||||
for _, n := range []aoc.Point[int]{
|
|
||||||
{p[0] - 1, p[1]},
|
|
||||||
{p[0] + 1, p[1]},
|
|
||||||
{p[0], p[1] - 1},
|
|
||||||
{p[0], p[1] + 1},
|
|
||||||
} {
|
|
||||||
if n[0] >= 0 && n[0] < len(g.m) && n[1] >= 0 && n[1] < len(g.m[0]) && g.m[n[0]][n[1]] != '#' {
|
|
||||||
neighbors = append(neighbors, n)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return neighbors
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *garden) Step(n int) {
|
|
||||||
if len(g.steps) == 0 {
|
|
||||||
g.steps = append(g.steps, aoc.NewSet(g.start))
|
|
||||||
}
|
|
||||||
|
|
||||||
for step := range(n) {
|
|
||||||
g.steps = append(g.steps, aoc.NewSet[aoc.Point[int]]())
|
|
||||||
for p := range g.steps[step] {
|
|
||||||
for _, n := range g.Neighbors(p) {
|
|
||||||
g.steps[step+1].Add(n)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g garden) String() string {
|
|
||||||
var b []rune
|
|
||||||
for i, line := range g.m {
|
|
||||||
if i == g.start[0] {
|
|
||||||
line[g.start[1]] = 'X'
|
|
||||||
}
|
|
||||||
|
|
||||||
if steps := len(g.steps) - 1; steps > 0 {
|
|
||||||
for p := range g.steps[len(g.steps)-1] {
|
|
||||||
if p[0] == i {
|
|
||||||
line[p[1]] = 'O'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
b = append(b, line...)
|
|
||||||
b = append(b, '\n')
|
|
||||||
}
|
|
||||||
return string(b)
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"bytes"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
_ "embed"
|
|
||||||
|
|
||||||
"github.com/matryer/is"
|
|
||||||
)
|
|
||||||
|
|
||||||
//go:embed example.txt
|
|
||||||
var example []byte
|
|
||||||
|
|
||||||
//go:embed input.txt
|
|
||||||
var input []byte
|
|
||||||
|
|
||||||
func TestExample(t *testing.T) {
|
|
||||||
is := is.New(t)
|
|
||||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
|
||||||
|
|
||||||
result, err := runner(6)(scan)
|
|
||||||
is.NoErr(err)
|
|
||||||
|
|
||||||
t.Log(result)
|
|
||||||
is.Equal(result.valuePT1, 16)
|
|
||||||
is.Equal(result.valuePT2, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSolution(t *testing.T) {
|
|
||||||
is := is.New(t)
|
|
||||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
|
||||||
|
|
||||||
result, err := runner(64)(scan)
|
|
||||||
is.NoErr(err)
|
|
||||||
|
|
||||||
t.Log(result)
|
|
||||||
is.Equal(result.valuePT1, 3709)
|
|
||||||
is.Equal(result.valuePT2, 0)
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
jqt: rhn xhk nvd
|
|
||||||
rsh: frs pzl lsr
|
|
||||||
xhk: hfx
|
|
||||||
cmg: qnr nvd lhk bvb
|
|
||||||
rhn: xhk bvb hfx
|
|
||||||
bvb: xhk hfx
|
|
||||||
pzl: lsr hfx nvd
|
|
||||||
qnr: nvd
|
|
||||||
ntq: jqt hfx bvb xhk
|
|
||||||
nvd: lhk
|
|
||||||
lsr: lhk
|
|
||||||
rzs: qnr cmg lsr rsh
|
|
||||||
frs: qnr lhk lsr
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,63 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
_ "embed"
|
|
||||||
"fmt"
|
|
||||||
"iter"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
aoc "go.sour.is/advent-of-code"
|
|
||||||
)
|
|
||||||
|
|
||||||
// var log = aoc.Log
|
|
||||||
|
|
||||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
|
||||||
|
|
||||||
type result struct {
|
|
||||||
valuePT1 int
|
|
||||||
valuePT2 int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
|
||||||
|
|
||||||
func run(scan *bufio.Scanner) (*result, error) {
|
|
||||||
g := aoc.Graph[string, int]()
|
|
||||||
var root string
|
|
||||||
|
|
||||||
for scan.Scan() {
|
|
||||||
line := scan.Text()
|
|
||||||
v, lis, ok := strings.Cut(line, ": ")
|
|
||||||
if !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if root == "" {
|
|
||||||
root = v
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, l := range strings.Split(lis, " ") {
|
|
||||||
g.AddEdge(v, l, 1)
|
|
||||||
g.AddEdge(l, v, 1)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, v := range enumerate(g.BFS(root)) {
|
|
||||||
fmt.Println(i, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &result{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func enumerate[T any](vs iter.Seq[T]) iter.Seq2[int, T] {
|
|
||||||
i := 0
|
|
||||||
return func(yield func(int, T) bool) {
|
|
||||||
for v := range vs {
|
|
||||||
if !yield(i, v) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"bytes"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
_ "embed"
|
|
||||||
|
|
||||||
"github.com/matryer/is"
|
|
||||||
)
|
|
||||||
|
|
||||||
//go:embed example.txt
|
|
||||||
var example []byte
|
|
||||||
|
|
||||||
//go:embed input.txt
|
|
||||||
var input []byte
|
|
||||||
|
|
||||||
func TestExample(t *testing.T) {
|
|
||||||
is := is.New(t)
|
|
||||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
|
||||||
|
|
||||||
result, err := run(scan)
|
|
||||||
is.NoErr(err)
|
|
||||||
|
|
||||||
t.Log(result)
|
|
||||||
is.Equal(result.valuePT1, 50)
|
|
||||||
is.Equal(result.valuePT2, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSolution(t *testing.T) {
|
|
||||||
is := is.New(t)
|
|
||||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
|
||||||
|
|
||||||
result, err := run(scan)
|
|
||||||
is.NoErr(err)
|
|
||||||
|
|
||||||
t.Log(result)
|
|
||||||
is.Equal(result.valuePT1, 0)
|
|
||||||
is.Equal(result.valuePT2, 0)
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
_ "embed"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
aoc "go.sour.is/advent-of-code"
|
|
||||||
)
|
|
||||||
|
|
||||||
// var log = aoc.Log
|
|
||||||
|
|
||||||
func main() { aoc.MustResult(aoc.Runner(run)) }
|
|
||||||
|
|
||||||
type result struct {
|
|
||||||
valuePT1 int
|
|
||||||
valuePT2 int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
|
||||||
|
|
||||||
func run(scan *bufio.Scanner) (*result, error) {
|
|
||||||
|
|
||||||
for scan.Scan() {
|
|
||||||
_ = scan.Text()
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return &result{}, nil
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"bytes"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
_ "embed"
|
|
||||||
|
|
||||||
"github.com/matryer/is"
|
|
||||||
)
|
|
||||||
|
|
||||||
//go:embed example.txt
|
|
||||||
var example []byte
|
|
||||||
|
|
||||||
//go:embed input.txt
|
|
||||||
var input []byte
|
|
||||||
|
|
||||||
func TestExample(t *testing.T) {
|
|
||||||
is := is.New(t)
|
|
||||||
scan := bufio.NewScanner(bytes.NewReader(example))
|
|
||||||
|
|
||||||
result, err := run(scan)
|
|
||||||
is.NoErr(err)
|
|
||||||
|
|
||||||
t.Log(result)
|
|
||||||
is.Equal(result.valuePT1, 0)
|
|
||||||
is.Equal(result.valuePT2, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSolution(t *testing.T) {
|
|
||||||
is := is.New(t)
|
|
||||||
scan := bufio.NewScanner(bytes.NewReader(input))
|
|
||||||
|
|
||||||
result, err := run(scan)
|
|
||||||
is.NoErr(err)
|
|
||||||
|
|
||||||
t.Log(result)
|
|
||||||
is.Equal(result.valuePT1, 0)
|
|
||||||
is.Equal(result.valuePT2, 0)
|
|
||||||
}
|
|
121
aoc_test.go
121
aoc_test.go
|
@ -9,6 +9,67 @@ import (
|
||||||
aoc "go.sour.is/advent-of-code"
|
aoc "go.sour.is/advent-of-code"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestReverse(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
is.Equal(aoc.Reverse([]int{1, 2, 3, 4}), []int{4, 3, 2, 1})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLCM(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
is.Equal(aoc.LCM([]int{}...), 0)
|
||||||
|
is.Equal(aoc.LCM(5), 5)
|
||||||
|
is.Equal(aoc.LCM(5, 3), 15)
|
||||||
|
is.Equal(aoc.LCM(5, 3, 2), 30)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestReadStringToInts(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
is.Equal(aoc.ReadStringToInts([]string{"1", "2", "3"}), []int{1, 2, 3})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRepeat(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
is.Equal(aoc.Repeat(5, 3), []int{5, 5, 5})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPower2(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
is.Equal(aoc.Power2(0), 1)
|
||||||
|
is.Equal(aoc.Power2(1), 2)
|
||||||
|
is.Equal(aoc.Power2(2), 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestABS(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
is.Equal(aoc.ABS(1), 1)
|
||||||
|
is.Equal(aoc.ABS(0), 0)
|
||||||
|
is.Equal(aoc.ABS(-1), 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTranspose(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
is.Equal(
|
||||||
|
aoc.Transpose(
|
||||||
|
[][]int{
|
||||||
|
{1, 1},
|
||||||
|
{0, 0},
|
||||||
|
{1, 1},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
[][]int{
|
||||||
|
{1, 0, 1},
|
||||||
|
{1, 0, 1},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func TestList(t *testing.T) {
|
func TestList(t *testing.T) {
|
||||||
is := is.New(t)
|
is := is.New(t)
|
||||||
|
|
||||||
|
@ -55,6 +116,24 @@ func TestPriorityQueue(t *testing.T) {
|
||||||
is.True(v == nil)
|
is.True(v == nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSet(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
s := aoc.Set(1, 2, 3)
|
||||||
|
is.True(!s.Has(0))
|
||||||
|
is.True(s.Has(1))
|
||||||
|
is.True(s.Has(2))
|
||||||
|
is.True(s.Has(3))
|
||||||
|
is.True(!s.Has(4))
|
||||||
|
|
||||||
|
s.Add(4)
|
||||||
|
is.True(s.Has(4))
|
||||||
|
|
||||||
|
items := s.Items()
|
||||||
|
sort.Ints(items)
|
||||||
|
is.Equal(items, []int{1, 2, 3, 4})
|
||||||
|
}
|
||||||
|
|
||||||
func ExamplePriorityQueue() {
|
func ExamplePriorityQueue() {
|
||||||
type memo struct {
|
type memo struct {
|
||||||
pt int
|
pt int
|
||||||
|
@ -72,7 +151,7 @@ func ExamplePriorityQueue() {
|
||||||
}
|
}
|
||||||
|
|
||||||
pq := aoc.PriorityQueue(less)
|
pq := aoc.PriorityQueue(less)
|
||||||
visited := aoc.NewSet([]int{}...)
|
visited := aoc.Set([]int{}...)
|
||||||
dist := aoc.DefaultMap[int](int(^uint(0) >> 1))
|
dist := aoc.DefaultMap[int](int(^uint(0) >> 1))
|
||||||
|
|
||||||
dist.Set(0, 0)
|
dist.Set(0, 0)
|
||||||
|
@ -116,6 +195,44 @@ func ExamplePriorityQueue() {
|
||||||
// point 6 is 19 steps away.
|
// point 6 is 19 steps away.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStack(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
s := aoc.Stack(1, 2, 3, 4)
|
||||||
|
is.True(!s.IsEmpty())
|
||||||
|
is.Equal(s.Pop(), 4)
|
||||||
|
is.Equal(s.Pop(), 3)
|
||||||
|
is.Equal(s.Pop(), 2)
|
||||||
|
is.Equal(s.Pop(), 1)
|
||||||
|
is.True(s.IsEmpty())
|
||||||
|
s.Push(4, 3, 2, 1)
|
||||||
|
is.True(!s.IsEmpty())
|
||||||
|
is.Equal(s.Pop(), 1)
|
||||||
|
is.Equal(s.Pop(), 2)
|
||||||
|
is.Equal(s.Pop(), 3)
|
||||||
|
is.Equal(s.Pop(), 4)
|
||||||
|
is.True(s.IsEmpty())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGraph(t *testing.T) {
|
||||||
|
is := is.New(t)
|
||||||
|
|
||||||
|
var adjacencyList = map[int][]int{
|
||||||
|
2: {3, 5, 1},
|
||||||
|
1: {2, 4},
|
||||||
|
3: {6, 2},
|
||||||
|
4: {1, 5, 7},
|
||||||
|
5: {2, 6, 8, 4},
|
||||||
|
6: {3, 0, 9, 5},
|
||||||
|
7: {4, 8},
|
||||||
|
8: {5, 9, 7},
|
||||||
|
9: {6, 0, 8},
|
||||||
|
}
|
||||||
|
|
||||||
|
g := aoc.Graph(aoc.WithAdjacencyList[int, int](adjacencyList))
|
||||||
|
is.Equal(g.Neighbors(1), []int{2, 4})
|
||||||
|
is.Equal(map[int][]int(g.AdjacencyList()), adjacencyList)
|
||||||
|
}
|
||||||
|
|
||||||
func ExampleFibHeap() {
|
func ExampleFibHeap() {
|
||||||
type memo struct {
|
type memo struct {
|
||||||
|
@ -134,7 +251,7 @@ func ExampleFibHeap() {
|
||||||
}
|
}
|
||||||
|
|
||||||
pq := aoc.FibHeap(less)
|
pq := aoc.FibHeap(less)
|
||||||
visited := aoc.NewSet([]int{}...)
|
visited := aoc.Set([]int{}...)
|
||||||
dist := aoc.DefaultMap[int](int(^uint(0) >> 1))
|
dist := aoc.DefaultMap[int](int(^uint(0) >> 1))
|
||||||
|
|
||||||
dist.Set(0, 0)
|
dist.Set(0, 0)
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user