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", }, } )