You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
3.7 KiB
224 lines
3.7 KiB
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
type puzzleTest struct {
|
|
inp1 string
|
|
ans1 string
|
|
|
|
inp2 string
|
|
ans2 string
|
|
}
|
|
|
|
func TestPuzzles(t *testing.T) {
|
|
for i, puzzle := range puzzles {
|
|
name := fmt.Sprintf("day %d", i+1)
|
|
test := tests[i]
|
|
t.Run(name, func(t *testing.T) {
|
|
|
|
if test.inp2 == "" {
|
|
test.inp2 = test.inp1
|
|
}
|
|
res1 := puzzle.solve1(strings.NewReader(test.inp1))
|
|
res2 := puzzle.solve2(strings.NewReader(test.inp2))
|
|
|
|
if res1 != "incomplete" && res1 != test.ans1 {
|
|
t.Errorf("solve1() = %s; wanted %s", res1, test.ans1)
|
|
}
|
|
|
|
if res2 != "incomplete" && res2 != test.ans2 {
|
|
t.Errorf("solve2() = %s; wanted %s", res2, test.ans2)
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
var (
|
|
tests = []puzzleTest{
|
|
{
|
|
// day 1
|
|
inp1: `1abc2
|
|
pqr3stu8vwx
|
|
a1b2c3d4e5f
|
|
treb7uchet`,
|
|
ans1: "142",
|
|
|
|
inp2: `two1nine
|
|
eightwothree
|
|
abcone2threexyz
|
|
xtwone3four
|
|
4nineeightseven2
|
|
zoneight234
|
|
7pqrstsixteen`,
|
|
ans2: "281",
|
|
},
|
|
{
|
|
// day 2
|
|
inp1: `Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
|
|
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
|
|
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
|
|
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
|
|
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green`,
|
|
ans1: "8",
|
|
ans2: "2286",
|
|
},
|
|
{
|
|
// day 3
|
|
inp1: `467..114..
|
|
...*......
|
|
..35..633.
|
|
......#...
|
|
617*......
|
|
.....+.58.
|
|
..592.....
|
|
......755.
|
|
...$.*....
|
|
.664.598..`,
|
|
ans1: "4361",
|
|
},
|
|
{
|
|
// day 4
|
|
inp1: `Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
|
|
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
|
|
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
|
|
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
|
|
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
|
|
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11`,
|
|
ans1: "13",
|
|
ans2: "30",
|
|
},
|
|
{
|
|
// day 5
|
|
inp1: `seeds: 79 14 55 13
|
|
|
|
seed-to-soil map:
|
|
50 98 2
|
|
52 50 48
|
|
|
|
soil-to-fertilizer map:
|
|
0 15 37
|
|
37 52 2
|
|
39 0 15
|
|
|
|
fertilizer-to-water map:
|
|
49 53 8
|
|
0 11 42
|
|
42 0 7
|
|
57 7 4
|
|
|
|
water-to-light map:
|
|
88 18 7
|
|
18 25 70
|
|
|
|
light-to-temperature map:
|
|
45 77 23
|
|
81 45 19
|
|
68 64 13
|
|
|
|
temperature-to-humidity map:
|
|
0 69 1
|
|
1 0 69
|
|
|
|
humidity-to-location map:
|
|
60 56 37
|
|
56 93 4`,
|
|
ans1: "35",
|
|
ans2: "46",
|
|
},
|
|
{
|
|
// day 6
|
|
inp1: `Time: 7 15 30
|
|
Distance: 9 40 200`,
|
|
ans1: "288",
|
|
ans2: "71503",
|
|
},
|
|
{
|
|
// day 7
|
|
inp1: `32T3K 765
|
|
T55J5 684
|
|
KK677 28
|
|
KTJJT 220
|
|
QQQJA 483`,
|
|
ans1: "6440",
|
|
ans2: "5905",
|
|
},
|
|
{
|
|
// day 8
|
|
inp1: `RL
|
|
|
|
AAA = (BBB, CCC)
|
|
BBB = (DDD, EEE)
|
|
CCC = (ZZZ, GGG)
|
|
DDD = (DDD, DDD)
|
|
EEE = (EEE, EEE)
|
|
GGG = (GGG, GGG)
|
|
ZZZ = (ZZZ, ZZZ)`,
|
|
ans1: "2",
|
|
},
|
|
{
|
|
// day 9
|
|
inp1: `0 3 6 9 12 15
|
|
1 3 6 10 15 21
|
|
10 13 16 21 30 45`,
|
|
ans1: "114",
|
|
ans2: "2",
|
|
},
|
|
{
|
|
// day 10
|
|
inp1: `..F7.
|
|
.FJ|.
|
|
SJ.L7
|
|
|F--J
|
|
LJ...`,
|
|
ans1: "8",
|
|
},
|
|
{
|
|
// day 11
|
|
inp1: `...#......
|
|
.......#..
|
|
#.........
|
|
..........
|
|
......#...
|
|
.#........
|
|
.........#
|
|
..........
|
|
.......#..
|
|
#...#.....`,
|
|
ans1: "374",
|
|
},
|
|
{
|
|
// day 12
|
|
inp1: `???.### 1,1,3
|
|
.??..??...?##. 1,1,3
|
|
?#?#?#?#?#?#?#? 1,3,1,6
|
|
????.#...#... 4,1,1
|
|
????.######..#####. 1,6,5
|
|
?###???????? 3,2,1`,
|
|
ans1: "21",
|
|
},
|
|
{
|
|
// day 13
|
|
inp1: `#.##..##.
|
|
..#.##.#.
|
|
##......#
|
|
##......#
|
|
..#.##.#.
|
|
..##..##.
|
|
#.#.##.#.
|
|
|
|
#...##..#
|
|
#....#..#
|
|
..##..###
|
|
#####.##.
|
|
#####.##.
|
|
..##..###
|
|
#....#..# `,
|
|
ans1: "405",
|
|
},
|
|
}
|
|
)
|
|
|