From a330f6baa2a3a46e1e9277ef4da161cd594373e9 Mon Sep 17 00:00:00 2001 From: Stanislav Nikolov Date: Mon, 5 Dec 2022 10:03:39 +0200 Subject: [PATCH] WIP --- day1/day1.go | 6 +- day1/day1_test.go | 12 - day2/day2.go | 128 +++ day2/prod.in.txt | 2500 +++++++++++++++++++++++++++++++++++++++++++++ day2/test.in.txt | 3 + day3/day3.go | 90 ++ day3/prod.in.txt | 300 ++++++ day3/test.in.txt | 6 + day4/day4.go | 87 ++ day4/prod.in.txt | 1000 ++++++++++++++++++ day4/test.in.txt | 6 + day5/day4.go | 19 + day5/prod.in.txt | 512 ++++++++++ day5/test.in.txt | 9 + main.go | 18 +- utils/set.go | 31 + utils/set_test.go | 21 + utils/utils.go | 4 +- 18 files changed, 4731 insertions(+), 21 deletions(-) delete mode 100644 day1/day1_test.go create mode 100644 day2/day2.go create mode 100644 day2/prod.in.txt create mode 100644 day2/test.in.txt create mode 100644 day3/day3.go create mode 100644 day3/prod.in.txt create mode 100644 day3/test.in.txt create mode 100644 day4/day4.go create mode 100644 day4/prod.in.txt create mode 100644 day4/test.in.txt create mode 100644 day5/day4.go create mode 100644 day5/prod.in.txt create mode 100644 day5/test.in.txt create mode 100644 utils/set.go create mode 100644 utils/set_test.go diff --git a/day1/day1.go b/day1/day1.go index d59b694..fd5e436 100644 --- a/day1/day1.go +++ b/day1/day1.go @@ -1,4 +1,4 @@ -package day1_calorie_counting +package day1 import ( "sort" @@ -27,7 +27,7 @@ func (s *Solver) ParseInput(input []string) { s.elves = elves } -func (s *Solver) SolvePart1() int { +func (s *Solver) SolvePart1() any { mostCalories := 0 for _, calories := range s.elves { sum := 0 @@ -41,7 +41,7 @@ func (s *Solver) SolvePart1() int { return mostCalories } -func (s *Solver) SolvePart2() int { +func (s *Solver) SolvePart2() any { caloriesPerElf := make([]int, len(s.elves)) for i, calories := range s.elves { sum := 0 diff --git a/day1/day1_test.go b/day1/day1_test.go deleted file mode 100644 index b649091..0000000 --- a/day1/day1_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package day1_calorie_counting - -import ( - "snikolov.me/aoc2022/testutils" - "testing" -) - -func TestCorrectSolutions(t *testing.T) { - solver := &Solver{} - testutils.TestHelper(t, solver, 1, true, 24000, 45000) - testutils.TestHelper(t, solver, 1, false, 66306, 195292) -} diff --git a/day2/day2.go b/day2/day2.go new file mode 100644 index 0000000..795fd7e --- /dev/null +++ b/day2/day2.go @@ -0,0 +1,128 @@ +package day2 + +import ( + "fmt" + "strings" +) + +type Solver struct { + rounds []*Round +} + +type ActionType int + +const ( + Rock ActionType = iota + Paper + Scissors +) + +func (a ActionType) Score() int { + m := map[ActionType]int{Rock: 1, Paper: 2, Scissors: 3} + return m[a] +} + +func NewAction(s string) ActionType { + switch s { + case "A", "X": + return Rock + case "B", "Y": + return Paper + case "C", "Z": + return Scissors + } + panic(fmt.Sprintf("Unhandled action type: %s", s)) +} + +type Result int + +const ( + Win Result = iota + Loss + Draw +) + +func NewDesiredResult(s string) Result { + return map[string]Result{"X": Loss, "Y": Draw, "Z": Win}[s] +} + +func (r Result) Score() int { + return map[Result]int{Win: 6, Draw: 3, Loss: 0}[r] +} + +type Round struct { + OpponentAction, OwnAction ActionType + DesiredResult Result +} + +func (r Round) Score() int { + var result Result + switch { + case r.OwnAction == r.OpponentAction: + result = Draw + case r.OwnAction == Rock && r.OpponentAction == Scissors: + result = Win + case r.OwnAction == Paper && r.OpponentAction == Rock: + result = Win + case r.OwnAction == Scissors && r.OpponentAction == Paper: + result = Win + case r.OwnAction == Rock && r.OpponentAction == Paper: + result = Loss + case r.OwnAction == Paper && r.OpponentAction == Scissors: + result = Loss + case r.OwnAction == Scissors && r.OpponentAction == Rock: + result = Loss + } + return result.Score() + r.OwnAction.Score() +} + +func (s *Solver) ParseInput(input []string) { + s.rounds = make([]*Round, len(input)) + + for i, line := range input { + split := strings.Split(line, " ") + s.rounds[i] = &Round{ + OpponentAction: NewAction(split[0]), + OwnAction: NewAction(split[1]), + DesiredResult: NewDesiredResult(split[1]), + } + } +} + +func (s *Solver) SolvePart1() any { + return s.score() +} + +func (s *Solver) SolvePart2() any { + for _, r := range s.rounds { + switch { + case r.DesiredResult == Draw: + r.OwnAction = r.OpponentAction + + case r.OpponentAction == Rock && r.DesiredResult == Win: + r.OwnAction = Paper + case r.OpponentAction == Rock && r.DesiredResult == Loss: + r.OwnAction = Scissors + + case r.OpponentAction == Paper && r.DesiredResult == Win: + r.OwnAction = Scissors + case r.OpponentAction == Paper && r.DesiredResult == Loss: + r.OwnAction = Rock + + case r.OpponentAction == Scissors && r.DesiredResult == Win: + r.OwnAction = Rock + case r.OpponentAction == Scissors && r.DesiredResult == Loss: + r.OwnAction = Paper + } + } + + return s.score() +} + +func (s *Solver) score() int { + score := 0 + for _, s := range s.rounds { + score += s.Score() + } + return score +} diff --git a/day2/prod.in.txt b/day2/prod.in.txt new file mode 100644 index 0000000..b9dd9f3 --- /dev/null +++ b/day2/prod.in.txt @@ -0,0 +1,2500 @@ +C Y +C Z +C Z +C Z +A Y +C Z +C Z +B Y +C Y +A X +C Z +A Z +C Y +C Z +C Z +B X +A Z +C Z +C Z +C Z +A Z +B X +C Y +C Z +C Z +C Z +C Y +C Z +C Z +C Z +C Z +C Z +A Z +B X +A Z +C Z +C Z +C Z +C Z +A Z +A X +B X +C Y +A Z +A Z +C Y +A Z +A Z +C Y +A Z +B X +A Z +C Z +B X +C Y +C Z +C Z +B Z +C Y +C Z +A Z +C X +C Z +B X +B Y +C Z +C Z +C Y +A Z +C Y +C Y +B X +A Z +B Z +C Z +C Z +C Z +B X +A X +B Y +C Z +C Y +C Y +A Z +A Z +C Z +C Z +C Z +A X +A X +C Y +C Z +A Z +C Y +A Z +A Z +C Z +A Z +C Y +C Z +A Z +A X +C Z +C Z +A Z +B Y +A Z +B X +C Z +C Y +A X +C Z +C Y +C Z +C Z +B Y +C Z +A Z +C Z +B X +C Z +C Y +A Z +B Y +B X +B X +A X +B X +A Z +B X +A Y +A X +A Z +A Z +C Y +B X +C Z +C Z +A X +A Z +A Y +B X +A Y +A Z +C Z +A X +C Z +C Z +C Z +B X +C Z +C Y +C Y +C Z +A Z +C Z +B X +A Z +C Y +A X +A Z +A Y +C Z +A Z +C Z +C Z +A Z +C Y +A Z +C Z +A Z +C Z +B X +C Z +A Z +C Z +C X +B Y +A Z +C Z +C Y +C Z +A Z +C Y +B Z +A X +A Z +B X +C Y +C Z +B X +C Y +C Y +A Z +B X +C Y +C Y +A Z +C X +B X +B Y +C Y +C Z +B X +C Z +A Z +A Z +B X +B X +C Y +C Z +B X +C Z +A Z +B X +C Y +C Z +C Z +A X +B X +A Z +C Z +A X +C Y +B Y +B X +C Z +C Y +C Y +A Y +C Z +C Y +C Z +C Z +A Z +C Z +C Y +A Z +C Y +C Z +C Y +C X +B X +A X +B X +C Z +A Z +C Y +C Z +B X +C X +B X +C Z +C Z +C Y +B X +C Z +A Y +C Z +A X +C Z +C Z +C Y +C Z +C X +B X +C Z +C Z +C Y +B Y +C Z +A X +C X +C Y +A Z +C X +A Z +C Y +C Z +C Z +B X +A X +C Z +B X +C Y +B X +A X +A Z +A Z +C Z +C Z +B X +C Z +A Z +C X +C Z +C Z +C Z +C Y +C Y +A Z +C Z +C Z +C Z +C Z +C Z +C Z +C Z +C Z +C Z +A Z +C Z +C Y +C Y +A Z +C Z +A Z +A X +C Z +C Y +C Z +C Z +C Z +C Z +C Y +C Z +A Z +B X +A X +B X +A Y +C Z +C Y +A Z +C X +C Z +C Z +C Z +C Z +C Y +A X +B Z +A Z +C Z +A X +C Z +C Z +A Z +C Z +C Z +A Z +C Z +B X +C Z +A X +C Y +A Z +B X +B X +C Z +B Z +C Z +B X +C Y +B X +C Y +A Z +A Y +A Z +C Z +C Z +A Z +C Z +A X +A Z +C Y +A X +C Y +C Z +C Z +C Z +A X +C Y +A Z +A Z +A X +C Z +C Z +B Y +A X +C Y +C Y +C Z +C Z +A Z +A Z +C Y +C Z +A Z +C Y +C Z +A Z +C Z +A Z +C Z +A Z +C Z +C Z +A Z +A Z +C Z +A Z +C Z +A Z +C Z +C Z +A Z +C Z +B Y +A Z +B X +C Y +C Y +C Z +A Z +A X +C Z +C Z +C Z +B Z +C Z +C Z +C Z +A Z +C Z +C Z +A X +C Z +C Y +A X +A Z +C Z +C Z +A Z +C X +A Z +C Z +C Y +A Z +A Y +A Z +C Z +C Z +C Z +C Z +C X +C Z +C Z +B X +B X +A Z +C Z +C Z +A Z +A Z +A Z +C Y +C Z +C Z +C Y +C Y +C Z +C Z +B X +A Z +C Z +C Y +A Z +C Z +A Z +C Z +C Y +C Y +C Z +B X +A Z +B X +C Z +C Z +C Z +A Z +C Z +C Y +C Z +B Y +C Z +C Z +C Y +A Z +C Z +B X +C Z +B Y +C Y +C Z +C Z +C Z +B Y +A Z +C Z +A Y +A Z +C Y +A Z +C Z +C Z +C Y +B Z +B X +C Z +B Z +C Z +C Y +B X +C Y +C Z +A X +A Z +C Y +C Y +A Z +C Y +B Z +B Y +C X +B X +C X +C Z +C Y +C Z +C Z +C Y +C Z +A Z +C Y +A X +C Z +C Z +C Z +C Z +C Z +C Z +A Z +B Y +C Z +C Z +A Z +B X +C Z +C Z +A Z +C Z +C Z +A Z +C Z +A X +B Y +C Y +C Y +C X +A Z +C X +C Z +B Z +B X +C Y +A Z +C Z +C Z +A X +A Z +C Y +A X +C Z +C Z +C Z +A Z +A Z +C Z +B Y +B X +B X +A Z +C Z +C Y +C Z +C Z +A Z +A X +C Y +A Z +C Y +C Y +A X +A Z +B X +A Z +B Y +A Z +C Z +B X +A Z +B X +C Y +B Z +C Y +C X +C Z +C Y +B X +B Y +B Y +C Z +C Y +A Z +A Z +C Y +C Z +C Y +B Z +C Z +C X +C Z +C Z +B X +C Z +B X +A Z +C Z +C Y +A Z +C Z +C Y +C X +A X +A Y +C Y +C Y +C Y +A Z +B Z +A Z +C Z +C Z +C Z +A Z +A X +A Z +C X +B X +C Z +A X +A Z +C Y +A Z +A Z +A Z +C Z +C Z +A Z +C Z +A Z +A Z +C Z +C Y +A Z +C Y +A Z +A Z +A Z +B X +B X +A Z +C Z +C Y +A Z +C Z +B X +C Z +C Z +C Z +A Z +A X +C Z +C Z +A X +A Z +C Y +C Z +C Z +C Z +C Z +C Z +C Y +C Z +A Z +C Z +B X +B X +A Z +C Z +C Y +C Y +B X +B X +C Y +C X +B X +A Z +A Z +C Z +C Y +A Z +C Z +C Z +C Z +A Z +C Z +C Z +B X +C Y +C Z +C Z +C Z +C Z +C Z +C Y +A X +C Z +C Z +A Z +A Z +C Y +C Z +C Z +C Z +A Z +B X +C Z +A X +A Z +A Z +C Z +A Z +C Z +C Z +C Z +C X +C Z +B X +C X +C Y +C Z +A X +A X +A Y +C X +C Y +B X +C X +A Z +C Z +C X +C Z +C Y +A X +A Z +C Z +C Z +A X +A Y +B X +C Z +C Z +C Z +B X +C Z +A Z +A Y +A Z +C Z +B X +A Z +C Z +C Z +C Z +B X +C Z +C X +C Z +C Z +B X +C Y +A X +C Z +C Y +C Z +C Y +A Z +C Z +A Z +A Z +C Z +C Z +A Z +C Y +C Y +B Y +A Z +A Z +B X +C Z +C Z +A X +B Z +C Z +C Z +A Z +A X +C Z +C Z +C X +C Z +B X +A Z +C Y +A Z +C Z +C Z +A X +C Z +C Z +A Z +C Z +A Z +B X +C Y +A Z +C Y +A Z +A Y +B X +C Z +A Y +C Z +C Z +B X +C Z +A X +C Z +A Z +A X +C Y +B X +C Z +C Z +C Y +A X +B X +A X +A Z +C Z +B Y +C Z +A Z +C Z +A X +B Z +C Z +C Y +C Y +A Y +B X +C Y +C Z +A Y +C Y +C Y +A Z +A Z +C Z +C Z +C Z +C Y +A Z +C Z +C Z +A Z +B Y +C Z +C Y +C Z +C Z +B Y +A X +C Z +A X +C Z +C X +A Z +C Z +A Z +C Z +B X +C Z +C Z +C X +C Z +C Z +A Z +A Z +B Z +C X +C Y +C Y +C Y +A Z +C X +C Z +A X +C Z +C Z +C X +A X +A X +C Z +A X +B Z +C Y +C Z +C Y +C Z +C Y +C Z +A Z +A X +C Z +B Y +C Z +C Z +B X +C Z +B X +C Z +C Y +A X +A Z +C X +C Y +C Z +C X +C Z +B X +A Z +C X +A Y +B Z +C Z +B X +C Z +C Z +C Y +C Z +A X +B X +C Z +A Z +C Z +C Z +C Z +A X +C Z +A Y +C Z +C Z +C Z +C Y +A Z +C X +A X +C Y +C Z +A Z +A Y +C Z +B Y +C X +A Z +C Y +C Z +A X +C Z +A Z +B X +A Z +C Z +B Z +A Z +A Z +C Y +C Z +A Y +A Z +C Y +C Z +C Z +C Z +C Y +C X +B X +C Z +B Y +C X +A Z +C Z +C Z +A Z +C Z +B Y +A Z +B Y +A Z +C Y +C Z +C Z +A Z +C Z +B Y +C X +A Z +A X +C Z +C Z +C X +A X +C Z +C Y +C Z +C Z +C Z +B Y +C Z +A Z +A Z +B X +A Z +C Z +C Z +C Z +A X +C Y +C Z +C Z +C Z +B X +A Z +A X +B Y +B X +B X +C Z +B X +C Y +A X +C X +C Z +C Z +C Y +C Z +C Z +A X +A Z +A X +B Y +A X +A Z +B Y +C X +C Y +C Z +C Z +A Z +A X +B Y +A Z +C Z +C Z +C Y +A Z +A X +C Z +A Y +A Z +A X +B X +B Y +C Z +C Z +A Z +C Z +A X +A Z +C Z +C Y +B X +A Z +B X +C Y +B X +A Z +A Z +A Z +B Y +C Z +A Z +C Z +C X +B Y +C Z +A Z +C Z +A Z +A X +C Z +C Z +C X +C Y +B X +B Y +A Z +A Y +A Z +C Z +A X +A X +A Z +B X +C Z +B X +B X +C Y +A Z +A X +C Z +B X +B Y +A X +B X +A Y +C Z +A Z +C Z +C Y +C Y +C Z +C Y +B X +C Z +B Y +A Z +A X +B X +C X +C Z +A Z +C Z +C Z +B X +B Y +C Y +A Z +C X +C Z +A Z +C Z +C Z +C Y +A Z +A Z +C X +C X +C Y +C Z +A X +A Z +C Y +C Y +C Z +A Z +B Y +C Y +A Z +C Y +A Z +B Z +B Y +A Y +B X +C Y +C Z +A Z +C Z +B Z +C Z +C Z +A Z +B Y +C Z +B X +C Z +C Z +C Y +C Y +A Z +A Y +C Z +C X +C Z +A Z +A Z +C Z +C X +C Y +A Y +C Y +A X +C Z +A Z +C Z +B X +C Z +C Z +C Z +A Z +A Y +B Y +A Z +A Z +B X +A X +C Z +C Z +B X +C Y +A X +C Y +A X +B X +C Z +C Z +C X +A Z +C Z +C Z +C Z +C Z +A Z +A Y +A Z +B Z +C Z +B X +C Z +B X +A Z +C Z +C Z +B Z +C Y +B Y +C Z +A Z +A Z +C Y +C Y +C Z +C Y +C Z +A X +C Y +B X +C Y +C Y +B Y +C Z +C Z +B X +C Z +B X +B Y +B X +B X +C Y +A Z +C Y +C Y +C Z +C Z +B X +C Z +A Z +C Y +B X +B X +C Y +C X +C Z +C Z +A X +C Z +B X +C Z +C Z +A X +A Z +C X +A Z +A Z +C Y +C Z +C X +C Y +C Z +A Z +C Z +B X +C Z +C Z +A X +C Z +A X +C Z +C X +C Y +A X +A Z +C X +C Z +A X +A Z +C Z +C Y +B X +A X +B X +C Z +A Z +C X +C Z +B X +A Z +C Z +C Z +B Z +B X +B Y +C Y +C Z +B X +C Z +B Y +C Y +A Z +C Z +C Y +A Z +C Z +A Z +C Y +C Y +A X +B Z +C Y +B X +C Z +C Y +C Z +C X +B X +B Y +A Z +C Z +C Z +A Z +B Z +C Z +C Y +C X +A Z +C Z +B X +C Z +A X +C Z +C Z +A Z +A X +C Y +B Z +C Y +C Z +C Z +C Z +A Z +A Z +C Z +A X +C Z +A Z +C Z +C Z +C Z +B Y +C Z +C Z +B Y +A X +B X +C Z +C Z +C Y +A X +C Z +A Z +C Y +A Z +A Z +C Y +B X +A Z +C Y +C Z +C X +B X +A Z +C Z +C Y +C Z +B Z +B X +A Z +A Z +C Y +A Z +C Z +B X +A Z +C Z +C Z +C X +C Z +C Y +B X +A Z +C Z +C Z +C Z +B X +A Z +B Y +C Z +C Z +A Z +B X +B X +B X +C Z +C Z +A Z +C Z +C Z +B Y +B X +A Z +C Z +C Z +C Z +A Z +B X +C Z +C Z +C Y +C Z +C Y +A Z +C Z +A X +C Z +C Z +B Y +C Z +C Y +B X +A Z +C Z +C Z +C Z +A Z +C Y +A X +C Z +C Z +A Z +C Z +A X +B X +A Z +C Z +B Z +C Z +A Y +B X +A X +C Z +C Z +C Z +C Y +B X +C X +A Z +C Z +C Z +C Y +A Z +C Z +C Z +B Y +C Y +B X +C Z +A X +A Z +C Z +C Z +C X +C Z +B X +C Z +C Z +C Z +C Y +C Z +C Z +C Z +C Z +A Z +C Z +A Z +A Z +B X +A Z +C X +B X +B X +A Z +C Z +C Y +C Z +C Z +C X +C Z +A X +A Z +C Z +C Z +C Z +C Z +C Z +C Z +B Z +C Z +A Z +C Z +A Z +A X +B X +A Z +C Z +C Y +C Z +C Y +A Z +A Z +A Z +A Z +A Z +B Z +A Z +C X +C Z +C Z +C Z +B Y +C Z +B X +A Z +B Y +C Y +C Y +C Z +B X +B X +A Z +A Z +A Z +A Z +C Z +C X +A Z +C Y +B X +C Z +C Z +C Z +C Z +A X +C Z +A Z +C Y +A Z +C Z +C Z +B X +C Z +B Z +C Y +C Z +C Z +C Z +C Z +C Z +A Z +C Z +A Z +A Z +A Z +C Z +C Z +A Z +C Y +C Z +B Z +C Z +C Z +C Y +C Z +A Y +C Z +A X +A Z +C X +C Z +A Z +A Z +A Z +A Z +C Z +A Z +A Z +C Z +C Z +C Z +C Z +A Z +C Y +C Z +C Z +A Z +C Z +B X +B Y +C Z +C Z +A Z +C Z +A Z +C Y +C Z +A Z +C Z +C X +A Z +C Z +C X +C Z +C Y +A Z +C Z +C Z +C Z +B Z +C X +C Z +C Z +A X +A Z +A Z +A Z +C Z +C Z +C X +A Z +A Z +C Y +C Z +A Z +A Z +A Z +C Y +A Z +C Z +A Z +C Z +C Z +A Z +C Y +B X +B X +A Z +B Z +A Z +C Z +C Z +C X +A Z +C Y +C Z +C Y +C Z +C Z +A Z +C Y +C Z +C Y +C Z +C Z +C Z +C Z +C Y +A X +A X +C Z +C Z +B X +C X +C X +C Z +A X +C Y +A X +B X +C X +C Z +C Z +A X +C Y +A Y +A Z +C Z +C Y +C Y +B X +A X +C Z +C Z +B X +A Z +C Z +B Z +C Z +C Y +C X +C Z +A Z +C Z +B X +B X +C Y +C Y +C Z +C Y +A Z +B X +C Z +C Y +A Z +C Z +B Z +B X +A Z +A Z +B Y +B Y +A Z +C Z +B X +A Z +C Z +A Z +C Z +B X +A Z +B X +B X +A X +C Z +A X +A X +A Z +C Y +C X +A X +C Z +C Y +C Z +A Z +A Z +A X +C Z +A Z +C Z +C Y +A Z +C Z +B X +A Z +B Y +C Z +C Y +C Z +C Z +A Z +A Z +C X +A X +C Y +C Z +C Y +C Z +C Z +C Z +A Z +A Y +A X +A Z +C X +B Z +C Z +A Z +A Z +A Z +B X +A Z +C Z +C Z +B X +C Z +A X +A Y +C Z +A Z +C Z +C Z +B X +C Z +C Z +C Z +C Z +C Y +C Z +A Z +C Z +C Y +C Z +C Z +C Z +B X +A Z +C Z +C Z +C Z +A X +C Y +C Z +A Z +C Y +A Z +C Y +C Z +C Z +A Z +A Z +C Y +A Z +B Z +C Z +C Z +B Z +A X +B X +C Z +C Y +A Z +C Y +B Y +A X +C Z +C Z +C Z +C Z +A Z +C Z +A X +C Y +A Z +C Z +B X +B Y +C Z +C Y +C Z +B X +C Y +C Y +C Z +B X +C X +A Y +C Z +C Y +A Z +C Y +A X +B Y +A Y +C Z +C Z +A Z +C Z +C X +A Z +C Z +C Z +C Z +C Y +C Z +A Z +B X +A Z +C Z +B X +C Z +A Z +C Z +B Y +A Z +C Z +A Z +C Z +A X +C Y +A Z +C Z +C Z +C Y +A Z +B X +C Z +A Z +C Z +C Z +A Z +C Z +C X +A Z +C Z +C Z +C Z +C Z +B Z +C Z +C Z +C Z +C Y +B X +A X +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B Z +C Z +A X +C Z +B Y +A Z +A X +C Z +C Z +A Z +C Z +C Y +A X +C Y +C Z +C Z +C Z +C X +C Y +C Z +C Y +C Z +A Y +C Z +A X +C X +C Z +C Z +C Z +A Z +C Z +B X +C Y +A Z +C Z +C X +C Z +C Z +C Z +A Y +A X +A Z +C Y +B X +B X +A Z +A Z +A Z +C Z +C Z +A Z +C Z +A Y +C Y +C Z +C Y +B Z +B Y +B X +A X +C Z +C Z +C Z +C Y +B X +A X +C X +A Z +A Z +C Z +C Y +A Z +A Z +A Z +C Z +C Z +C Y +B X +A Z +C Z +A X +C Y +A Y +B Y +A Z +A Z +A Z +C Z +C Z +B X +A Y +C Z +A Y +C Y +C Z +A Z +C Y +B X +C Z +C Z +C Z +B X +B X +C X +B X +A Z +A Z +C Z +C Z +A X +C Z +C Z +C Z +A Z +A Z +A Z +B X +C X +C Z +A Z +A Z +B X +B X +C X +B X +A Z +C Z +C Z +A X +C X +A Z +C Y +A Z +A Z +B X +C Z +C Z +A Z +A Z +C Z +C Z +C Y +C Y +C Z +C Y +C Z +C Z +C Y +A X +C Z +C Z +A Z +C Z +A Z +C Z +C Z +C Y +C Z +C Y +A Z +C Z +C Y +B Z +B X +B X +A X +C Z +C Z +A Y +C Z +C X +C Z +A Z +A Z +A Z +C Y +B Y +B X +A Z +C Z +C Z +C Y +A Z +C Z +C Z +A X +A X +B X +A Z +C Z +A X +C Z +A Z +C Z +C Z +A Z +C Z +B Y +B X +A Z +C Y +C Z +C Z +A X +C Z +C X +A Z +B X +C Z +C Z +C Z +C Z +C X +C Z +A Z +C Z +A Y +B X +A Z +A X +A Z +C Y +C Z +C Y +C Y +C Y +C X +C Y +C Z +C Z +C Z +C Y +B X +C Z +B X +C Z +C Z +A Z +B X +C Z +A X +C Y +B Y +A X +B Z +B X +A X +A X +A X +B Y +C Y +C Z +B X +C Y +C X +A Z +C Y +A Z +C Z +C X +B X +C Y +A Z +C Y +C Z +A Z +C Y +B Y +C Y +B X +A Z +C Y +C Y +C Z +C Z +C X +B X +C Z +B X +C Z +C Z +A Z +C Z +A Z +C Z +C Z +C Y +C Y +C Z +C Y +A Z +C Z +C Y +A Z +C Z +C Z +C Y +C Z +B X +B X +A X +C Z +A Z +C Z +A Z +C Z +B Y +A X +C Y +C Y +B X +A Z +C Z +C Z +C Y +C Z +A Z +C Y +B Z +C Y +C Z +C Z +C X +C Y +B X +C Y +C Z +C X +A Z +C Z +C Z +C Y +A Z +C Z +A Z +C Y +A Z +A Z +A Y +C Z +A Z +C Z +A Z +C Z +C Z +B Z +A X +C Y +A X +C Z +C Z +A Z +C Z +A X +A X +C Z +B X +B Z +C Y +C Z +A X +B X +C Z +C Z +B X +A Z +C Z +A Z +A Y +C Z +A Z +C Y +C Y +A Y +B X +C Z +C Y +A X +C Z +C Y +A X +A Z +C Y +B X +C Z +A Z +C Z +C Z +A Z +C Z +C Y +C Y +C Z +A Z +B Z +C Y +A Z +C Z +C Y +C X +C Z +C Z +A Z +C Z +C X +C Z +C X +C Y +C Z +A Z +C Z +A Z +B X +C Z +B X +C Z +A X +C Z +C Z +B Y +C Z +C Z +B X +C Z +C Y +C Y +B X +A Z +A X +A Z +A X +C Y +B X +A Z +C Y +A Z +C Z +B X +B Z +C Z +C Y +C Y +C Y +A Z +B X +C Z +C X +A X +B Z +C Y +B X +A Z +C Z +C Z +C Z +C Z +C Y +B X +C Z +C Z +C Z +C Z +A X +A Z +C Z +C Y +C Y +C Z +A Y +C Z +C Z +C Z +B X +C Y +C Z +C Z +A Z +C Z +C Z +C Z +B X +A Z +B X +C Z +C X +A X +C Z +C Z +C Z +C X +A Z +A Z +B X +A Z +C Z +C Z +A Z diff --git a/day2/test.in.txt b/day2/test.in.txt new file mode 100644 index 0000000..db60e36 --- /dev/null +++ b/day2/test.in.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z diff --git a/day3/day3.go b/day3/day3.go new file mode 100644 index 0000000..a696d97 --- /dev/null +++ b/day3/day3.go @@ -0,0 +1,90 @@ +package day3 + +type Solver struct { + rucksacks []Rucksack + + groups []ElfSet +} + +type Rucksack struct { + compartment1, compartment2 []byte +} + +type ElfSet struct { + elfItems [3]map[byte]bool +} + +func (s *Solver) ParseInput(input []string) { + s.rucksacks = make([]Rucksack, len(input)) + + for i, line := range input { + s.rucksacks[i] = Rucksack{ + compartment1: []byte(line[:len(line)/2]), + compartment2: []byte(line[len(line)/2:]), + } + } + // fmt.Printf("%v\n", s.rucksacks) + + var elfSet ElfSet + for i, line := range input { + elfIndex := i % len(elfSet.elfItems) + if elfIndex == 0 { + elfSet = ElfSet{} + } + if elfSet.elfItems[elfIndex] == nil { + elfSet.elfItems[elfIndex] = make(map[byte]bool, 0) + } + for _, b := range []byte(line) { + elfSet.elfItems[elfIndex][b] = true + } + if i%3 == 2 { + s.groups = append(s.groups, elfSet) + } + } + // fmt.Printf("%+v\n", s.groups) +} + +func (s *Solver) SolvePart1() any { + var total int + + for _, r := range s.rucksacks { + m := make(map[byte]bool, 0) + + for _, b := range r.compartment1 { + m[b] = true + } + for _, b := range r.compartment2 { + if _, ok := m[b]; ok { + total += getValue(b) + break + } + } + } + + return total +} +func getValue(b byte) int { + if b >= 'a' && b <= 'z' { + return int(b - 'a' + 1) + } else { + return int(b - 'A' + 27) + } +} + +func (s *Solver) SolvePart2() any { + var total int + for _, g := range s.groups { + for item := range g.elfItems[0] { + if _, ok := g.elfItems[1][item]; !ok { + continue + } + if _, ok := g.elfItems[2][item]; !ok { + continue + } + total += getValue(item) + // fmt.Println(string(item)) + break + } + } + return total +} diff --git a/day3/prod.in.txt b/day3/prod.in.txt new file mode 100644 index 0000000..35008ac --- /dev/null +++ b/day3/prod.in.txt @@ -0,0 +1,300 @@ +rZTmmqbBrmBvSTCwDDtlwjqnqnnq +dhgQHhPfVgPlPdFzFzFgdptCQjtnwCntjsCppRtRND +lVdVHWGPvTvmrrBW +GmJBqwPLhfPBfJfvfffFmwtjDprpzVpVMpcDrVjzzcjpML +HgWnRnWggWbNTWbCnPCgCnsjcVDrjMrdzjprMMrzcHDrDr +SsSsRsCSPSPBvtJt +BLtwwTBmLSTlMsjdZmFZZP +hzbzNNrbqQbhQDDrhCprbhDCpvFJJPjMZJZgjjPdlvZjZvvl +fbNrqrVDfdfGzqcHTBTVHwcTSHcH +lcDdcrCDCRHJHBllPR +tNGQwQhtzLhJBRHbPMBMjGBj +NZZZpVqqFqpQpCTZcTnrTrnJJC +BSNLNzbLLsMGSDLSsSBdVwTVQFdTVTtqgTwNVN +lRjplvmWpgrqwlVFFr +mfRCpWwvChZCBGSzZG +mDSlGBGwhGhmLHCQnMMVMLMVFJ +WTNfjNgzNdgNWfsgsWWcWgfrVrnnFHQbrHvFrVVdHMrnCr +FpcggcNttFfqSqDtwBDmhZ +HzNsHbGsddQHPrsNPNsTnNjMbjVbcVlMLjMjLtlttjjv +CQfBZDQfWJlJlLJhvMMv +WwwmWRfFwmCmwwzQzzzrdGNHFzNT +JDvhJfdZZTdCTnmmTH +qbPcsqbjcbstjbgnvqpRCBTCmgCm +WPbPtbtVjWQsPvSVzSZLMDMVfLZJ +NjMbTZPjHjbdBqNBqFqDFz +LCcLSRLStRrLHShCtRfcpCtpQVqqDFDFqDdFpBddDQQFdB +htCGtrSJLfScvwJvggbgwHgW +hmPTmfFPwBFHhsBstJldltstVDSVrrpD +CjzNGQjnRMMvMngMLGRVRBltVrVppqptVSqlVJ +cLBjgjGGGCgvLLnhZThwcfTHPTcPmw +SzwsVwcGsTVTmzmgjsLsmWWnGJZbbJbZtZqnDJntGq +NHQvpvNRflHvQpPMlbtbZqbFDnWlqVrD +dpPQVdpHMPRBpfCszCmsLsmcjdSg +wZZGGrnGVvZGPTcTnGvVCVpmpJSgCJtNpWgWVgmC +MdMRqqzMLDtQDQmzJg +HBMdRLLBLBdbbBLHlRjLrHPPnTvGtTcwhGrhZtvh +fcbcPWmvPvftWbDNVJJDrrhsJs +wQvzqvpQQzHQwTTNVhrBGJTJ +ZCMvzHMRCqggmWmndPngnn +VjvVJvjdgjJNTVgdpjRttsTHSsbFqqRHSbBR +nrfZLZCZnLnCCncZCrCQLSsFHHqtsSsSSBcHGtHsFh +nQlLMrmwZtmwCMmMwZmtLLggvNvVjjNJglpDgzNdJJvN +bCjQbTzCBlCvpqPTbZphtWWRhtddmDRRdRhPhh +sLJsnJFcsnJcMMjNnfsjDDcDWcRgggtmwVRtVmhh +sMsJLFfGrfFnrSNJjHzlTCCCQzpbBpzQzSBQ +gWRzWwcrzWcgZHRzHmcpTLTgTLhQDSgFFLTpLD +bBJfvJCssGJNjvPmbbmbLTQFTLQp +jsCqBJsVsGBqCfNcWMmrRWlWqmwMcz +cLjncLlQbllRhlnQTRblwtndsgpWdqgmnWNWmGpvWzdgzz +DrFJBFFHZrrDDVJSNmpsWdzVpmzdqqzpzq +FJPPHfDJPDPCZSZHFSDPCJtwRjClttNbwwjQLjcRhLlb +tZZRtWCRtsspLRqSVqbPDfVvlfFDqV +dgvMcccHHDHNrrbf +wGwdgBBhhcBhCvTZvtCppp +LRRNFfffFzzcrGRffNfcGNzJnrnhjdDMHHnrWdlmhddHnjrh +BvStvwSqqCZVqtvpZBWMMhhFhWdmdMWMhm +TTvqSbwqTPpZPzQsQRffsFGQ +phZZpGbGVmqDbPTF +tlNwlncnzwddcrGPlFmjlTTlfmjD +zntnczBMdvBnnvnthHHZMJhCLpZSSRGQ +ZwLLnbCDfClLZzZwDzCCZDbmNNdNtdBVNTNdNWMFtTFzTVFd +vlPlJRgRhQcPQQjpcRQJBBthNdtddtthtFMNWqMq +ppJgsgrJpJgslgrgRSPDDDLZLnHbrLHbwLbHfb +sBrNSTsrgDDMSjpPWVVqhppbsbtz +HTJfHwFwRFCnCPbzbzVzbVWq +QTcvvcmHnwGvvnRNrLglNNLNDZcZZL +qNNHSSFgbhLHHNfBwlJjQwwBcwQN +WZnVrZrMpVvZmVjwBvzBQRflJJcz +pWVGpWnmrmWjDmtnWVVZmtPFPCSbPgqgLSqtHCgTHgHH +QcQHqhpqQGbvbqHNqfhsQfHczZMlBZdZBlSFFZpZlFMDRFBM +TPVgmmrjtWjwrtwgLmTwLPMDZlMDMnSzzZgglzldBlgZ +PVtPrmPddrPCVTNqcHvQbHsCQNGh +PnsrrsdsSrnCvJCJBVwNqcHPRwNLWHwV +pjTQlgGWMjZBbRHHHZcbVV +htpThhlMjFdWrtDrfrsn +GZjHFHgjpbZQbgpHdgpjjBMTQsMJWzWRcsLMCRWzcz +ltwPlhwPSlwmmDhfrMwlzLLTSWJRssCBJWzsccCc +nfrnrntPnDmDDnPrwmvlVGdGFFNqjVHNjbGFjgFNMp +BjHBvHHqnBHrnnvclqjqplRRRQSfRpJQwPswStJsJQSt +wVFGWdVZVhWVDzVdZDSfRJtLLZJPtJRJSfJP +TDhCdWmNwzTWVmDBvMlrHmcqvHBMng +HpDpHvjvCjDHZHVWJSCrnrJgnNwr +rtQhssBTlRMblLBTtNnJFVSnnwVVwVWNnb +BhrchlmBBszfjmzzffDf +MMcJtJmVmnppVmSSpbCRvDvDRLDqvBRRCCMC +GWNNGGGfrjlHHHNZZZLNZt +jGrgfFjQrdhlhhgQFrVpnpVgmStPSJSPzJPP +wvJNJNtfGGphQQjFdGWj +DzSLzPczBrqzPrLMjSpjWMlSpQgwWd +zPHRqBLqqHzPcBDPsznZCwJsnfVnmZmtVntC +ttVWftWgGlWGfgtLtNddrNDdNvsLrdLdNm +JCcFSnbBqbRbSBCBqTFSQCmwMjRsrDRNNjDddssNfDrr +cBHBTTQFJJCCJQcCbCcqnSftHtZhHzWghPzVZpPglVVW +ZfSGFQdbrHQSbFFqlwLjCjLPlqwj +gmWJgNppJrgMcchzhmzNczqRsVRCjVRVsWjVRLRqqCVq +zDTchzJJJhgJJmBJhBTJBggtQHGrdbfnHHDHGvftStvHdf +LdRCgCDvCbCdnLnCvpGtQlhffNlhtSlQNtQlhb +BTJTVFJrqMVmBmdTMFNHNVQQQSHHffQhNlHQ +MqcBmqPdFBdjPPBTJqpZDDpgGDpgWCcvGCLp +gzFbjgqljdqblbbddBZTMvTBdMsVvm +SHpGWBCtSPhNpPSSSpwSNGNSTLTVVsZsLrvRrRvVLLRCvTvm +NwhHwPhDtSGpbDcBQqczbBBj +BhzLDSflLlTTRfqGpJZZQsqfNF +ndCmMHHRPbCjCwVPVmjtwdMVsNGJQpZQsJqJqNJdFqJZFrNq +CtwbRcRbttHBSgTcgShvTz +pffmzCtppTSWtzdhbJdZvvHVnvdHVV +WMlLWRGGQWMGrQJcVbvbHnvQHbhv +LFwRFDlqFPWfTszp +sbfFTbbbzJzfbJZSbnsnfTchGWWJGlhWvvBGltgVttgWgg +LLLDpHwMDLmNjmChVWWBwthrGQvgQl +dLMLDMLBNddPHmpMPfqPcPzcsSbbccqb +MNGMPvHTnfTfgSFrSMMgwFMw +QQRpjBsqhRQsldpqRQQQmjZFtrrzSFFccvSWwwjwFWZS +smsBbQlRlmDpDBqpqblpLbLLfTfNVPVVGnTvTLbb +gsmFlVCShjVwNNDNgWBNHg +dMtQvtQRrtbLMqMnqqsq +GQfGQPRtrPddPtvcvcQZRvRpJlVJFTlpZTVJpFJsSCFJjh +LFmpcmhNfhhnjStshM +qWTCCQrqlQBQcJCqrJdlHDdnRtngRStnPjgDSgSsjM +CZWrqTbllrClJZWbVfmmZcvVzmGZmfpv +qJLCqjwjjJnFqnDQQfqlQMfMQlMg +zmHWPhGGZVGpcCWMsWRRfBBRDs +bdpCcGmZdNFTwnSjrd +TttqjWvQjZTtzwWtdBCMdBMqdGCBRnhR +bpJlcNFVzbcBhCMMCChbMP +cJVgrplDcslrlrpFzwTHQsSTWLQtjWvLWj +hWlmVhlpcNpScSVtNbjrbGqdHGjgQrdrRdqG +LPBDCvFszTCzFzFzBBffHrJrrGHRHsgRjsjrjJqc +DTCMMzzvvnDvLvLDTTBTCMFBpWpthShmwmmWmwchptnhwWWt +dfHqNQSQQNQBHHZJfJCMCfVcRJCZ +GjLrDjgvFrFzjDgPGvLzgmmjCslRZMMCststJMlRcPVTRJJM +vjmmvrnzDDLVzrdSWNBQnWwdhHhH +jTmMBMNBTVSqNgBTjgNMqMTgWZttCmLfpQQZQWtLCdCGGtWC +zzVVbhFcbzstWCZpsftsQZ +whwhwPnDhHRhbRVHcSNllvMnNnjMjSBJMl +nSvQgHWtZvHlgtvqgqngjSFFFDNSfsbbbjGfcsSr +PPVRdNwRLhdLLCCwbscBBfGfbLjjjDbs +zVPPhMhMmhhVppRpMNRPhMQnHqZtHZvgQzWgQgvnqnnq +JdFHDSShfgDNMhGTBlwGGJqjjJTr +PCnWnsvpzPnmLvmsQGRGWrwlWbljwTjFGl +PtnLzQCQLfSFctdNhN +cTrjrCNrLjTFCTrLCdSVNVlJVSVVGJftNp +swQHQDsQGRZGffQV +ggffMhhvgswDgDnhhfCcTjrcTjWBWCMmcjjc +wGHvHCvWlMLlhGWwvvwlNnRBRdDNDBLDRVVDFdBD +MtJJTPTTQNFRNFRfTn +crSsmmJjmtgWmMhwWMCw +sQQHWGsWcWWrZQQshNtHFNBCNBqHFwHB +jSLbMSdfjSjFtFghNtFBMt +RSdmtLmSLLzSLdjjdTTbVvsVVsvZcZQzWPWcQrrW +PCCTzTgDgzVZZLgcgcdswMMMgs +hSrqdqRQSjqtNqcsGWcGLwMGMf +tlQJRJSRjpJjZPdpDTdHbzTn +pqBGDDtQBDLVhfCtCZVV +bTNFcljgbdlFjbldjFdTTcfZqZVsLhgfVLhVhZVHfZwC +McJjFbvTWvmRqGRr +JRcsJDfgncfHnqSBqGSTGQsTTz +vlBlLlpNWpPhVmTQpQSzqbqQ +CBPvjFNMlFhCCRtZJZZHfg +RFQQTdQQLtThDhfRcHdLfFcHJCWtbbPnJWJPNJbnJsvstvJv +ZmMlMlwwMrVzwVqrSqmZrqbplpNWFbWJnvvspWWNslNs +gwwmFrgMGgFqGTHRhHjDRTHH +dNfQvLdQsvSLsHsLBgNWVggJJCWCDJgnJJ +ZTGcflFlFRfhbwhbPcbbbWVWrMVMnDJCCWmVnDJCmF +lTfZTpjjZhPhRcqtBtsdSQpqQvtv +frfccJzjTBwWwcJwjrwcBVCVTRCGnpsGGSmpVSSpDH +hhhvghZvZlZvghPbdtqGpGVCRHGGmsRmpsvGRV +MdPCNqdtgZdZgcWMLzcffBcWzM +LdsfZNRsRWvvfLSsCpSgCDJbPcCp +MqTVtHHThllGMthlBHzcSzGGSFppPgbJDFbF +nVHwVlHmlhRWdjjjLvwD +whhWFjjzhGmGCrFFFzvtZsLZVStNZWLNpvtv +nqPMBdMQBqJnnfqdsSNfpvtZsSNtNpLp +HJHnQHqQlhwLlhzmGh +nMlmnfHmfjjmflLlLdzJTrsrBLJJLBbBSJrJ +pZRpFFDWctFPNtWvbbrTqrszTbqbcBqr +RpRGNPPvPFsNvflmdfwMGHhmmH +PjPzphfpJFPvFRHDbP +QlLlBcvBvnWCWcVCnFTTSnFDNdSRRRHN +sVtlVcVtmqjMJphrfvJs +dRRHRfrdRHHlCTTprlNCvhVVvhzpQhVvtmntmhtz +JMDJBLwQMBDDwZgJnhSzhmWStMvzbbmm +PPwJwGqPGQcDcHHjCqRlRCjrCN +GgGgbGSGzGbMBBzGDVFbDMRpmcWWTTfcFTchsJdcWJchTsch +NCqCttLZrCPQtNrtWqfhWJJqscmTJwsc +ZClvLCLmPjnPllPvCLrmnDRjpDzGpMRDRRDBGBgSzb +tvwCtDMQvJJPJtvQprjrjrvBjsTZTWTj +gFzgldFZSlSbgFlZmGmcFqsppjsLqrBsLBrqqWWjdB +FlcbhhNNbmHmcbSSzzggwDDQDwJnVCVHPtMVnnZQ +hrCnnrFrCvFHzVFdmmFm +GDTBsSfDDBRwfDsQbSdjHHVlqpmpgqWqpH +TBDBDBQBwcsPsPGQswPcZvJMrJhnrNhrNNnHJM +CztfzfZLBjMqZZWZgT +VPcblQhJvtgbvbgb +wwFQwVRPRchwcrJcPzfRpzspBfzfnSCzmt +FMnmnQnFNdQFRtmFmfNsCsjfpfrHHfVffV +DlLqDPwGlbVCdVbddbsr +GPDzLhqwLqDMFdFJRWzQzd +CSDSrMqnVSCTsPGPZpnPPGvP +jhBhhqBQQlhgjthBhlhJpLlwLLPwsswsGZpWPLvP +dgJQzgFjzjJFzzdHFzzzJMmNHCrSMSCSNbRqDCMCmR +cvSPvzWwzcTbVWSPbppWVjsGjdHdQSlNsQSdNGqsHZ +MRmCfmFBfRJfjqrdNMZHZQjQ +qgFtChDCFgmCnppPnczPbcLpnL +RllsdrhQvcVqmVzQcm +gGgnrZZMrFWFpZcccVmHqjVmHHnJ +ZrMWTTbbGMpbtgCTTZgZCWCLhwdsLvhhhPhNSldvPwPNfNlR +ffMqqznPPMzHfdfcdBJGTMVTGjRmMMTBjr +vtDwSwpmDsmQZswWSDhhDQGrjTgJBglRsjTTjVRBVTBl +ZthhQStwppSSvbvNDtWwnnbffmPnHPFHqmzFbLFq +CcHPmPcTJTqNCPqbqJqLgNJrjWtrftjrrnBnsWtjtBsfTB +ZRLwhzwLRlhLpdlpjftBBnBjWsBBvn +QhzhlwDdMzwFSwRLMJqqcSmqNPgmqNHNVP +WzTWppwcQNppbQrJHhhrJfcdfnsr +MDMLlLqjvqSBvVCLGJhnJsrDnnrDdhDffZ +BLMCBCBlLlGSJvSPBMLqGJVwwQzPpNRWmTRzmzpWWFmTbQ +WpWpWsfcBFjwGgqqtTQrTpgg +JLHNPPvLJRZdnNJZHRzGGTzjrtMqMJlQzztt +vHHnbDnLnHRCRnvdZdbHLNPfBfBhcffmcSSsDjcVwVBmcS +DDZlblRRLQcNpJNhpL +VPrdJfBFFBBWBrdvJPCBBdfhqcFhchNQcpNgzqcjphqFjp +mWVPfMWWfBMWWwPrWvJHDbZGZmZRtDbsDbSb +PDwwBzvRRzPCBPgnrwvvCDsSSccWscFTnSshWnZsSZcF +GJtNGHfLbQtQQJQGhhhShgSZWVWJjSFF +tmHlfGfMlBzrRDMggz +gSBNwDNJglSwlDMtTCsZzStTsSCC +hhfGdGcFhrqFmQddrhvvrdGRRtQMTHMCsbZbZtRTsbZsQs +mrmrFqqqccdhWjGcnLpBDWgNWpCBlgLW +WgmBsqMBnLLGnGnJtFgbbTwHttTwHF +cQjcfpVQfCCPSMjCcCPSPjVwbtTlTtwJbTvJJHbzHFFJ +PCZDCZffCdpQCdDWrGGsnLqWhnrM +gppVszSgMPMPstzNpPMQpnGfDJhfnGLLGnfLfQlLfh +rBFcCcrbmbJJJWhbhLVL +wqcmRFZqmcvvCZBcRvcVwNsztSPzHstSgzMNSgpS +qzLJRZfpRZtNNMSfftFN +QDnPHCCGvbQnnCwMMlcFgsgHFFlNlV +rPCMQnbdhRLqJLzhzB +dfdrfqBqBtRwBsFR +cDczzSMzDcSGSQbCfFjRFZtZCZmtwZRt +bVcJSbVbSDllNrrWWNdvWf +WSPPWlppCQlZPGqPjhcjfs +JJrJrRTHNTNLbbNLcfzzSfSzGTjsqZsj +FVRFNgVRbDbdwlWpSnvQnVQM +znJTCRCSvRpzVBjWJdBBBVNb +gggcfGDrGDZqwhwfGBjbHVSVdtdjtBShWj +ZrgmqmGDGfDPmrfwPmsqZPfCpsFFnFvlSMCLLvpSRFFMvL +qhhfgzzSGDSZSgfrcjhcjCCndnbjdr +FPTTTwBHBPJMJVJBGwmjvCmBdjjNNcrjncNc +GwTttMsTtHFtVFtDplSDzgRpDqsfpD +vzwsPlvFFdJGjQwdJw +HHNbpDTbVMvTpmMHvddtRtJJjjJRdLmLGj +HbqHcbMvlWrqzWFW +hMJMJBhPTnDMJJTGmmGmwDpRzRpFWz +lSZPPNvbNllPpGRFwwzRNGgm +bHZCZbvrttlZClqbHbsrbnQMThdJBQhVQBPdscnPQB +ZRNZfffHLfDLgfNlHWwhChWzzVdcVH +jpJmJjvnTtSjtJvQWldPWcBdPSdWzzcz +jGGsGsFFFGnJtTvvTszZNqqNgrsDLRDqLqrL +rrblpnfnVVfspgrppnMrpsrGdGdzgddzPFCjCzjzzzjtDC +TRWTJwThJhRvwZWvJBZvqDzQzGBPCzdHGjdGGGttzj +JSZmTZZwWvqhwqrrVnrLnPmbsbPr +MdhjZhZZDTdPDcgCSLfgCpCL +vvwtnwnssznwJnwvBbBBHHRSSfLLcpWfSWWzcLRTRWpf +snJtHJHmbBsrswNtsnjhlhqZPqTjjTjQMPGr +gmSnWMMzvvNWCNWCJJph +QfqjcbcRGGjcwhNppNqMptdNHL +rGPbflPfwPvlFFvTTMlg +trTdMJvtlLntbCRN +GBZsGFGBcRbZCRNR +SSGFmFjqVNFVssjSVjqjvMMQvgTmMgMMQWMmTdhJ +GcNcdNdwMZSqNZSSScSdqGwDrCmJMVrCmHmVVCFVJDrmFV +jTvsRsWbjjbQQfvTThFVZVTVDJVHlCFr +BjnBPfRWBnRsnvBsRBQQSSGzpZLdgwcLZqzgzPLg +clNrNpjbNpbRrCpsRlrVtjwVZwttttZVgMHwZS +FJBBDhJDTQFThqssvPJBBvHMWLwgwSHtWLZMwZgwSg +qQJfdJDhGsBBDFJBnlzGmmnRzbCpcrzl +ZPbfgBvcZPPZPWWWWBFbQllndnqdnlpwdSNfnwdN +LzLrzDhmDRRJpJzptDhCSCqHMHqnqSlHqMSQNHQS +zTsRzsDTJszzrrLRstrGJLsPpbVVPbcgTBcZvbPVFggbjP +THpVHSrLZrzzvPtJdtsqLssdLW +fbfCCQgQllWwwwFmjRsPcqcPsJJJdscPdmsP +RNQlQgCFfgwVppWTNvGrvn +PqFwwcqzDlFJDDQVMjQmMBjG +ZgTZZndCpBMVNTvvQc +pHgtZdtRnnLhcshdhWzWSFlbsJsqzzzbSb +zjfgjMhhgMJdfHQHWdVQvR +CrmpmpZpHQptHHHQ +CnwcFbNCqQBFwwFFsPslJgsjhMlMcDJP +HpnStLpnQnHnqQLQqpMSSWWZbswNcNqwbNsfwqGGZc +dVRRTCTVJNLcfJcJFb +gzjTRCddgLDdzdjCCrBjjdhhBnQPSSBhvlSBQvMhQMnt +lFTlwMwZlblSjrCpVvvsptspZpps +nHRPPnqnhPRqJHhqqhfdPqLCHvBCvvscvVNczztCCvsvtm +RJDghDhRhhGPPqGhsPhhFSbbwGSFjGQlWTrbwQbW +RRjgNPTRFhglgNNjTsmGqCCGZfzmHCnZGnZCqq +SppWLbtbCzZMpHMZ +dSDbbJdVVlHFNlll +dtZdGmqqtmzhtqZtZswzSnSjfNHNVjzCWCnCffHz +LgpMFMvlhvRMhhDDlvvQLFJCfSCHnFVJnSnJHNjSnj +rRBLcQcpQcrZbwsZshbs diff --git a/day3/test.in.txt b/day3/test.in.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/day3/test.in.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/day4/day4.go b/day4/day4.go new file mode 100644 index 0000000..edd233a --- /dev/null +++ b/day4/day4.go @@ -0,0 +1,87 @@ +package day4 + +import ( + "strconv" + "strings" +) + +type Solver struct { + elfPairs []ElfPair +} + +type ElfPair struct { + first, second map[int]bool +} + +func (s *Solver) ParseInput(input []string) { + s.elfPairs = make([]ElfPair, len(input)) + + for pairIndex, line := range input { + pairs := strings.Split(line, ",") + + var i, j int + + p1 := strings.Split(pairs[0], "-") + m1 := make(map[int]bool) + + i, _ = strconv.Atoi(p1[0]) + j, _ = strconv.Atoi(p1[1]) + for ; i <= j; i++ { + m1[i] = true + } + + p2 := strings.Split(pairs[1], "-") + m2 := make(map[int]bool) + + i, _ = strconv.Atoi(p2[0]) + j, _ = strconv.Atoi(p2[1]) + for ; i <= j; i++ { + m2[i] = true + } + + s.elfPairs[pairIndex] = ElfPair{m1, m2} + } +} + +func (s *Solver) SolvePart1() any { + var total int + + for _, ep := range s.elfPairs { + if contains(ep.first, ep.second) || contains(ep.second, ep.first) { + total += 1 + } + } + + return total +} + +func (s *Solver) SolvePart2() any { + var total int + + for _, ep := range s.elfPairs { + if len(intersect(ep.first, ep.second)) > 0 { + total += 1 + } + } + + return total +} + +func contains(m1, m2 map[int]bool) bool { + for k := range m1 { + if _, ok := m2[k]; !ok { + return false + } + } + return true +} + +func intersect(m1, m2 map[int]bool) []int { + result := make([]int, 0) + for k := range m1 { + if _, ok := m2[k]; ok { + result = append(result, k) + } + } + return result +} diff --git a/day4/prod.in.txt b/day4/prod.in.txt new file mode 100644 index 0000000..12d430c --- /dev/null +++ b/day4/prod.in.txt @@ -0,0 +1,1000 @@ +4-90,1-4 +80-94,80-81 +1-97,96-99 +20-87,20-88 +84-84,83-88 +9-75,10-75 +7-25,24-48 +10-99,11-98 +4-98,1-1 +20-42,1-42 +5-31,6-31 +9-14,15-84 +87-98,22-81 +44-69,45-68 +2-2,2-83 +16-76,69-75 +43-71,43-91 +30-95,29-29 +1-1,3-87 +22-90,22-80 +86-90,91-98 +11-20,10-20 +59-67,60-79 +20-75,20-95 +26-57,27-56 +7-71,6-72 +10-78,1-6 +59-67,31-68 +91-95,7-81 +15-60,14-14 +5-54,6-53 +88-97,91-96 +46-70,45-69 +65-79,64-86 +74-74,25-73 +1-95,95-98 +8-70,70-71 +1-2,1-1 +35-43,38-60 +11-81,12-12 +1-1,1-90 +5-10,4-23 +87-97,52-96 +4-98,5-98 +1-3,7-90 +91-93,10-92 +46-46,46-89 +10-99,10-97 +34-50,51-51 +26-72,42-73 +9-69,9-10 +78-85,22-79 +65-72,64-78 +52-93,51-52 +4-22,5-22 +33-34,11-55 +46-91,47-90 +78-96,12-96 +16-98,15-98 +28-78,6-77 +7-15,7-16 +35-95,13-43 +99-99,73-92 +34-70,38-69 +4-74,92-96 +86-90,52-90 +15-45,15-44 +11-53,54-86 +21-78,16-21 +30-35,32-34 +49-72,71-78 +77-94,35-63 +6-47,17-36 +7-96,6-94 +50-51,50-65 +15-75,14-76 +19-88,12-87 +13-64,4-63 +53-64,52-65 +69-79,79-86 +13-34,13-14 +48-57,48-85 +66-80,2-79 +11-82,3-6 +29-91,29-84 +7-16,16-36 +45-86,44-87 +86-86,21-86 +21-87,22-86 +6-79,12-79 +3-64,98-98 +44-69,45-68 +19-94,95-95 +5-92,5-84 +83-85,84-85 +16-88,16-89 +86-91,29-86 +27-85,86-86 +48-60,48-69 +1-3,3-82 +25-25,40-46 +52-77,51-76 +35-38,36-38 +75-75,5-76 +62-77,63-69 +21-83,22-91 +12-12,12-93 +30-82,31-41 +17-62,18-63 +5-97,3-5 +49-96,50-96 +46-48,46-50 +22-22,14-21 +5-98,4-98 +91-92,16-92 +1-97,98-99 +85-97,73-96 +45-62,11-50 +3-14,13-73 +8-75,9-76 +32-58,33-53 +3-68,65-68 +6-10,6-7 +2-2,2-26 +6-96,5-95 +12-90,53-90 +48-86,49-59 +4-89,4-95 +44-44,45-54 +43-65,42-89 +95-95,5-79 +51-53,37-52 +31-99,30-97 +3-83,2-78 +32-73,32-33 +68-83,68-79 +4-17,16-53 +25-64,24-26 +8-92,8-93 +3-77,3-78 +53-77,29-77 +77-99,76-97 +46-88,49-83 +52-63,53-64 +25-78,14-84 +5-39,4-39 +48-84,49-83 +14-78,52-83 +27-87,35-95 +11-48,6-48 +3-99,1-34 +20-25,28-67 +33-61,34-83 +11-21,20-32 +30-39,10-39 +22-25,29-51 +18-88,32-89 +12-87,12-13 +49-76,29-32 +17-52,77-92 +72-79,65-79 +4-53,2-2 +61-91,62-91 +6-69,70-70 +2-96,96-99 +20-68,19-68 +60-98,59-59 +31-34,30-34 +2-22,19-21 +3-80,79-80 +72-72,71-71 +1-92,1-1 +67-86,48-94 +42-43,43-80 +3-89,89-90 +5-68,3-69 +7-7,6-65 +78-86,78-81 +54-85,85-85 +9-64,10-10 +39-96,38-38 +60-62,18-61 +20-47,47-81 +2-97,98-99 +18-83,83-83 +12-93,12-13 +4-4,3-74 +77-96,11-62 +2-81,2-80 +53-59,52-59 +55-94,54-90 +29-30,29-42 +52-69,64-69 +9-90,3-10 +16-39,15-61 +74-76,38-75 +12-14,22-43 +12-90,11-11 +5-94,6-93 +6-18,17-23 +8-8,8-18 +27-42,26-41 +8-77,7-7 +46-47,47-47 +1-57,21-29 +11-87,2-2 +45-45,46-46 +64-65,64-87 +36-36,37-74 +34-56,38-56 +66-77,67-98 +1-86,2-21 +11-30,12-29 +98-99,31-97 +5-5,10-71 +18-83,11-19 +8-38,3-8 +2-79,48-78 +10-14,9-24 +16-91,16-96 +3-3,4-99 +25-35,29-84 +49-70,50-74 +48-68,49-49 +61-61,57-61 +40-79,50-78 +56-83,27-84 +82-92,54-82 +50-59,59-69 +52-84,52-83 +17-66,15-65 +2-91,3-3 +13-47,12-88 +62-80,61-70 +11-71,4-8 +35-88,36-88 +9-55,5-10 +31-53,30-91 +22-36,35-97 +5-64,4-65 +61-61,4-62 +10-78,16-73 +6-81,5-82 +10-42,9-75 +17-36,16-96 +51-83,85-85 +35-68,67-68 +46-61,19-60 +12-55,10-56 +3-90,9-91 +63-97,98-99 +32-93,33-52 +66-71,67-67 +22-82,82-83 +6-91,7-92 +76-97,98-99 +33-86,53-85 +37-83,37-82 +5-86,64-87 +29-52,40-51 +60-76,76-77 +20-40,56-58 +14-88,3-89 +15-15,16-88 +96-99,6-97 +55-76,54-76 +22-88,28-81 +21-21,21-36 +2-92,1-93 +13-36,12-35 +50-81,18-51 +46-48,1-47 +17-82,82-84 +7-9,12-88 +16-94,16-58 +18-52,17-96 +6-82,7-82 +14-94,48-93 +12-76,9-13 +20-98,21-96 +69-95,16-92 +2-3,2-93 +28-38,27-39 +11-65,11-64 +43-44,43-63 +1-1,4-98 +3-3,3-9 +63-89,21-63 +6-48,5-48 +13-51,13-50 +90-96,53-95 +9-44,30-44 +61-74,61-62 +47-87,48-83 +26-26,25-96 +58-95,57-95 +24-81,80-81 +9-95,3-94 +13-31,14-32 +14-89,89-89 +19-29,18-28 +7-41,4-7 +63-73,63-64 +3-11,10-95 +36-41,26-47 +19-79,18-80 +46-86,30-45 +84-91,84-87 +1-76,1-88 +43-80,1-3 +3-8,47-77 +54-54,21-55 +3-83,82-83 +54-72,15-55 +10-49,62-71 +7-98,10-93 +89-92,8-93 +67-68,24-67 +43-80,44-84 +35-51,88-99 +4-99,3-98 +16-63,8-64 +80-99,81-99 +14-95,13-96 +13-84,12-13 +19-80,18-81 +2-91,3-86 +59-59,1-58 +23-90,10-21 +99-99,3-96 +7-7,3-8 +66-95,24-95 +27-86,26-86 +45-96,48-95 +33-56,29-34 +43-43,44-91 +2-96,3-97 +16-16,15-77 +61-61,61-71 +17-73,73-74 +64-86,63-86 +21-23,42-46 +29-30,19-30 +12-96,2-97 +25-25,25-73 +15-21,14-20 +82-90,15-69 +5-29,6-29 +2-95,82-96 +19-56,6-55 +24-56,24-52 +5-6,5-94 +40-97,40-40 +79-99,55-80 +9-98,97-99 +16-98,9-99 +70-71,24-70 +13-34,14-33 +40-41,40-51 +6-98,7-97 +16-77,55-58 +16-24,9-19 +41-70,42-70 +6-98,99-99 +77-77,40-76 +34-77,34-87 +74-92,29-74 +5-33,4-96 +14-83,1-82 +5-40,5-30 +72-72,11-71 +45-45,44-58 +10-10,9-72 +5-42,1-43 +11-99,10-99 +6-6,6-96 +39-59,38-60 +92-94,41-93 +1-17,3-94 +20-49,20-50 +3-26,28-54 +40-60,10-59 +24-95,55-96 +4-97,5-98 +3-93,1-93 +3-99,4-95 +60-98,17-57 +12-12,13-78 +3-34,2-99 +6-6,5-63 +3-85,4-65 +4-77,4-77 +56-56,11-55 +27-99,37-98 +7-7,7-59 +22-89,28-85 +6-39,7-96 +15-21,11-16 +51-72,13-71 +7-41,7-41 +18-28,10-27 +38-78,25-38 +32-84,32-83 +48-92,48-69 +83-84,84-84 +52-94,52-89 +33-33,31-33 +34-78,34-35 +6-97,14-96 +18-62,17-70 +12-51,13-56 +68-68,24-67 +6-19,19-63 +19-88,15-88 +44-62,45-63 +5-82,6-82 +4-89,96-99 +20-35,35-85 +39-52,38-51 +44-98,28-99 +76-78,6-76 +86-93,37-88 +63-82,12-83 +69-78,61-79 +97-98,6-98 +28-73,28-28 +11-73,10-73 +3-4,6-80 +71-75,72-75 +74-75,10-74 +5-99,4-18 +24-32,9-25 +1-8,7-80 +17-53,52-93 +13-95,12-94 +28-87,28-54 +78-89,90-93 +24-54,54-54 +11-62,10-62 +66-82,65-82 +31-94,30-94 +5-96,6-98 +90-91,27-81 +63-64,63-89 +5-63,5-5 +91-92,3-41 +65-66,60-65 +48-99,48-49 +9-96,8-9 +6-48,6-47 +4-87,3-86 +10-99,11-98 +4-79,4-4 +19-71,65-72 +3-90,3-3 +16-97,17-98 +61-98,99-99 +7-24,6-66 +76-82,77-82 +47-89,46-94 +4-91,6-70 +28-29,30-53 +54-58,55-74 +33-71,72-99 +26-26,26-43 +97-99,12-94 +30-82,99-99 +94-94,42-94 +4-98,5-98 +41-82,40-83 +1-92,97-99 +40-43,31-39 +60-96,59-68 +90-90,90-95 +22-24,22-97 +13-98,98-99 +56-86,85-85 +89-92,93-93 +80-80,4-81 +67-98,66-87 +5-97,6-97 +20-67,68-68 +6-18,4-6 +31-71,32-32 +14-25,13-39 +90-90,9-91 +4-80,51-79 +59-88,15-99 +27-76,28-28 +7-47,48-48 +15-94,16-89 +15-50,16-50 +31-56,2-32 +14-62,15-61 +9-99,9-97 +82-92,11-82 +3-33,3-32 +9-79,51-78 +63-80,36-63 +57-60,57-82 +51-53,52-89 +11-20,44-98 +41-79,36-41 +61-79,74-79 +20-55,54-70 +49-51,17-50 +15-20,15-19 +46-75,47-74 +38-65,34-39 +86-89,37-85 +4-85,3-3 +8-76,2-76 +62-73,45-73 +29-31,29-53 +76-78,25-77 +11-98,11-11 +17-93,18-94 +4-12,5-12 +15-75,18-76 +1-14,1-3 +35-98,34-99 +2-34,34-67 +18-23,18-68 +68-70,39-69 +64-86,85-87 +22-94,5-64 +12-95,13-95 +88-88,68-87 +15-82,30-50 +11-26,25-27 +12-12,11-53 +15-47,48-48 +56-63,62-83 +36-98,35-98 +29-46,30-47 +64-64,50-64 +4-67,9-67 +71-95,67-94 +58-66,57-63 +55-71,56-70 +7-10,7-11 +17-91,90-90 +81-81,41-81 +1-24,1-5 +69-98,98-98 +15-85,14-85 +75-95,33-51 +13-67,17-66 +22-46,23-63 +3-94,3-4 +11-81,81-83 +79-92,80-80 +5-79,5-80 +67-75,66-96 +51-75,76-76 +12-74,13-73 +4-11,10-65 +17-61,8-11 +63-63,9-64 +38-38,23-38 +15-89,19-80 +95-96,74-95 +79-81,63-80 +89-89,39-88 +7-41,8-41 +16-23,22-96 +7-50,8-98 +30-75,31-74 +30-30,30-89 +52-53,52-78 +15-16,21-40 +3-37,13-38 +18-61,19-32 +78-79,1-78 +40-65,66-98 +2-72,67-71 +7-9,8-88 +26-61,25-25 +49-91,49-92 +2-24,2-94 +10-43,10-44 +73-80,6-79 +65-66,66-66 +24-31,31-32 +4-23,40-58 +4-86,1-1 +1-93,1-1 +7-8,7-83 +53-53,35-52 +7-7,6-71 +8-77,76-77 +11-33,11-42 +66-66,67-67 +35-53,34-52 +23-23,23-68 +9-20,10-15 +16-74,15-83 +20-82,58-81 +19-84,82-84 +50-77,50-77 +5-7,7-71 +18-93,52-92 +77-93,89-99 +43-43,42-43 +4-64,1-83 +8-74,74-75 +29-62,29-94 +8-50,1-9 +9-99,8-61 +5-98,4-98 +17-79,79-80 +53-84,54-85 +36-78,37-79 +45-74,46-73 +43-64,44-65 +39-45,38-72 +13-32,12-96 +5-5,5-84 +66-96,67-81 +84-84,24-83 +27-66,65-67 +12-46,64-72 +34-94,95-95 +10-89,10-11 +4-72,3-71 +13-38,12-16 +15-92,92-93 +16-16,17-74 +89-89,88-88 +5-65,6-65 +63-87,64-86 +19-86,18-86 +72-72,51-73 +64-95,65-65 +15-92,15-16 +48-86,49-86 +96-98,2-97 +99-99,2-97 +52-61,51-51 +80-92,13-93 +95-97,89-96 +49-54,54-59 +63-99,62-89 +4-88,3-88 +8-56,8-56 +10-31,30-32 +44-44,26-43 +81-93,40-91 +34-60,60-61 +22-80,12-23 +46-84,78-85 +22-83,22-71 +16-98,19-94 +34-47,39-46 +1-12,73-81 +12-98,12-48 +13-91,21-59 +26-65,26-66 +33-33,33-55 +6-99,7-98 +12-12,12-67 +11-68,1-95 +82-94,6-83 +62-70,61-94 +9-9,10-76 +23-93,93-93 +65-87,64-87 +86-88,19-87 +91-92,3-96 +8-93,93-94 +4-29,4-18 +10-23,22-35 +7-18,18-56 +23-82,7-11 +60-75,39-49 +9-78,19-77 +42-86,41-41 +24-24,39-99 +92-92,4-91 +3-12,4-14 +17-65,29-66 +44-91,92-93 +3-96,2-97 +5-92,4-93 +74-76,36-75 +8-65,6-9 +11-84,78-85 +50-50,30-57 +5-77,1-2 +31-94,93-95 +40-71,41-70 +90-92,4-91 +9-66,80-87 +30-57,57-86 +26-34,27-34 +38-84,37-85 +65-74,65-66 +60-84,3-85 +4-63,3-93 +61-93,62-62 +18-24,18-19 +7-12,11-13 +60-70,60-61 +4-57,4-63 +21-30,29-62 +49-89,48-90 +9-97,96-98 +1-97,3-94 +4-93,4-94 +3-96,7-81 +2-2,2-86 +4-8,1-8 +28-33,53-82 +20-91,19-91 +1-88,20-76 +8-70,3-16 +13-63,63-71 +4-71,71-72 +14-88,89-89 +8-87,5-9 +6-63,47-62 +61-99,61-99 +22-26,21-84 +47-86,47-51 +9-15,4-14 +2-67,3-66 +22-94,23-94 +21-86,20-86 +24-68,24-64 +38-38,38-56 +43-99,33-44 +85-86,53-85 +69-69,12-69 +11-12,30-98 +28-58,25-28 +27-94,28-98 +7-94,99-99 +35-91,17-92 +92-92,19-91 +12-94,40-93 +18-82,18-19 +3-96,2-97 +43-71,44-70 +39-82,40-83 +6-52,24-52 +19-51,20-52 +26-53,48-54 +15-99,14-16 +5-12,11-97 +12-86,86-87 +27-27,26-94 +14-15,18-87 +20-46,37-90 +12-61,12-13 +25-25,19-25 +93-97,13-92 +1-10,10-11 +25-34,25-30 +53-59,54-59 +25-92,66-93 +6-6,5-40 +2-31,1-32 +5-5,6-76 +19-99,9-98 +12-92,11-91 +3-33,58-90 +19-64,33-63 +10-54,10-55 +8-8,9-90 +16-90,15-90 +82-94,82-83 +12-77,27-64 +14-37,15-36 +63-83,74-84 +7-98,7-93 +7-87,23-88 +9-95,4-9 +42-46,80-89 +7-92,8-91 +7-14,7-20 +43-91,42-42 +53-81,1-82 +8-80,6-20 +19-59,5-58 +29-90,13-29 +29-90,28-30 +89-95,18-96 +76-76,21-75 +28-97,27-97 +28-91,27-91 +5-89,12-85 +62-63,20-62 +33-90,33-98 +12-53,11-54 +31-66,67-67 +60-90,61-91 +8-8,10-83 +50-82,36-83 +54-95,55-96 +42-80,43-81 +40-40,40-75 +10-69,9-27 +43-47,26-34 +44-75,12-76 +35-36,35-97 +6-25,5-25 +4-65,2-5 +70-71,50-70 +9-95,4-9 +38-75,38-39 +72-94,8-71 +30-97,30-31 +8-87,8-40 +19-59,18-59 +3-96,1-96 +4-69,3-99 +4-7,7-98 +16-94,93-94 +8-86,9-87 +23-97,23-98 +5-89,6-6 +15-32,15-15 +8-79,2-8 +6-22,7-22 +89-91,24-90 +57-85,7-86 +54-79,53-54 +96-97,7-97 +45-45,9-44 +28-98,46-97 +40-65,66-66 +12-26,13-26 +10-10,10-76 +29-59,28-59 +17-39,16-72 +69-70,70-81 +60-61,60-64 +18-56,18-95 +21-21,21-80 +15-36,15-95 +1-98,1-1 +61-65,60-66 +80-91,80-99 +42-81,65-82 +44-87,43-90 +12-90,11-90 +5-94,6-94 +81-81,44-80 +2-37,21-47 +26-81,30-81 +29-81,97-97 +7-79,3-78 +43-74,42-73 +3-77,3-74 +2-74,1-2 +46-68,14-46 +1-58,3-78 +46-70,13-52 +92-96,32-92 +32-81,31-80 +17-97,17-98 +40-75,75-76 +22-22,22-73 +13-96,13-95 +47-70,46-70 +21-56,22-22 +7-87,3-96 +12-48,13-48 +23-84,3-24 +20-98,20-99 +8-79,6-95 +6-62,2-98 +21-28,3-28 +67-69,59-68 +16-86,14-14 +25-77,25-26 +9-34,9-35 +8-13,14-14 +8-24,8-91 +8-76,6-75 +9-78,9-10 +19-82,7-19 +83-84,62-83 +16-86,17-86 +32-32,14-31 +24-73,23-99 +5-16,5-15 +7-99,8-98 +12-94,13-91 +37-38,37-92 +3-87,3-4 +10-96,10-93 +2-77,1-76 +61-87,37-70 +2-24,80-86 +3-97,3-17 +5-74,46-58 +76-78,40-77 +7-94,7-87 +15-31,31-32 +10-96,70-98 +4-51,52-90 +48-52,52-75 +19-46,18-47 +82-97,25-96 +15-54,8-15 +90-90,89-94 +16-91,16-65 +3-97,3-99 +6-90,6-91 +75-76,1-75 +9-9,8-86 +34-34,34-36 +94-94,42-93 +7-37,6-36 +5-5,5-67 +59-84,3-90 +26-26,25-99 +44-97,96-97 +41-77,42-57 +33-79,34-80 +68-70,68-68 +68-81,67-80 +4-93,4-5 +25-42,3-26 +44-77,45-95 +38-97,96-98 +33-34,32-34 +90-93,89-89 +21-60,60-85 +44-91,20-95 +26-68,25-63 +17-18,17-73 +6-93,6-7 +26-31,27-32 +10-97,10-98 +33-84,33-92 +93-98,2-93 +39-92,39-91 +9-73,8-65 +10-89,9-62 +50-89,50-51 +35-98,99-99 +50-96,24-87 +99-99,25-96 +37-78,4-79 +2-10,10-11 +13-71,11-14 +51-76,7-76 +38-52,42-51 +10-91,3-11 +7-78,3-79 +5-7,3-3 +28-50,17-50 +39-62,4-15 +6-97,5-98 +63-91,23-99 +12-93,11-19 +52-93,73-99 +12-95,12-12 +13-28,27-84 +83-85,12-84 +26-99,26-27 +58-62,57-88 +27-43,44-44 +43-96,20-44 +34-61,59-60 +44-75,43-75 +1-99,5-93 +17-99,18-98 +84-90,85-89 +5-49,1-5 +26-74,43-74 +65-93,65-90 +18-84,11-19 +15-15,14-83 +19-97,19-96 +2-95,4-95 +84-84,85-85 +7-53,53-56 +2-2,3-60 +24-48,48-72 +1-1,1-97 +15-29,16-20 +1-20,19-50 +6-88,1-7 +14-47,13-13 +4-44,4-42 +7-98,7-12 +30-69,3-30 +73-82,81-83 +1-96,1-86 +4-4,3-48 +94-96,5-86 +29-73,29-30 +21-22,22-80 +97-98,29-98 +42-75,76-84 +86-92,85-93 +14-70,13-69 diff --git a/day4/test.in.txt b/day4/test.in.txt new file mode 100644 index 0000000..9f9e9cf --- /dev/null +++ b/day4/test.in.txt @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8 diff --git a/day5/day4.go b/day5/day4.go new file mode 100644 index 0000000..62423e3 --- /dev/null +++ b/day5/day4.go @@ -0,0 +1,19 @@ +package day5 + +type Solver struct { +} + +func (s *Solver) ParseInput(input []string) { +} + +func (s *Solver) SolvePart1() any { + var total int + + return total +} + +func (s *Solver) SolvePart2() any { + var total int + + return total +} diff --git a/day5/prod.in.txt b/day5/prod.in.txt new file mode 100644 index 0000000..7227e79 --- /dev/null +++ b/day5/prod.in.txt @@ -0,0 +1,512 @@ +[S] [T] [Q] +[L] [B] [M] [P] [T] +[F] [S] [Z] [N] [S] [R] +[Z] [R] [N] [R] [D] [F] [V] +[D] [Z] [H] [J] [W] [G] [W] [G] +[B] [M] [C] [F] [H] [Z] [N] [R] [L] +[R] [B] [L] [C] [G] [J] [L] [Z] [C] +[H] [T] [Z] [S] [P] [V] [G] [M] [M] + 1 2 3 4 5 6 7 8 9 + +move 6 from 1 to 7 +move 2 from 2 to 4 +move 2 from 7 to 4 +move 6 from 4 to 3 +move 1 from 5 to 1 +move 3 from 8 to 3 +move 15 from 3 to 4 +move 6 from 5 to 9 +move 14 from 4 to 2 +move 3 from 2 to 7 +move 1 from 2 to 7 +move 9 from 9 to 1 +move 3 from 2 to 1 +move 7 from 6 to 7 +move 1 from 6 to 8 +move 2 from 9 to 1 +move 9 from 2 to 3 +move 8 from 3 to 9 +move 1 from 1 to 4 +move 1 from 8 to 6 +move 1 from 6 to 2 +move 5 from 9 to 8 +move 2 from 9 to 1 +move 1 from 4 to 2 +move 17 from 1 to 9 +move 1 from 3 to 1 +move 3 from 2 to 3 +move 2 from 4 to 5 +move 12 from 7 to 3 +move 16 from 9 to 2 +move 5 from 7 to 5 +move 2 from 1 to 2 +move 1 from 3 to 6 +move 1 from 4 to 6 +move 1 from 7 to 3 +move 1 from 6 to 3 +move 7 from 3 to 4 +move 5 from 8 to 3 +move 1 from 6 to 7 +move 7 from 3 to 4 +move 6 from 3 to 1 +move 2 from 4 to 8 +move 1 from 5 to 2 +move 10 from 4 to 5 +move 3 from 5 to 2 +move 2 from 8 to 9 +move 5 from 2 to 8 +move 1 from 3 to 5 +move 2 from 5 to 8 +move 12 from 5 to 7 +move 1 from 4 to 2 +move 5 from 9 to 4 +move 1 from 2 to 5 +move 6 from 1 to 3 +move 6 from 3 to 5 +move 10 from 7 to 4 +move 2 from 7 to 3 +move 4 from 7 to 6 +move 1 from 9 to 5 +move 12 from 2 to 1 +move 1 from 8 to 7 +move 3 from 7 to 4 +move 4 from 4 to 8 +move 7 from 5 to 3 +move 1 from 2 to 4 +move 10 from 1 to 5 +move 2 from 1 to 2 +move 4 from 6 to 7 +move 8 from 8 to 3 +move 5 from 4 to 9 +move 12 from 3 to 8 +move 4 from 3 to 8 +move 2 from 9 to 2 +move 3 from 5 to 4 +move 1 from 3 to 5 +move 1 from 7 to 6 +move 14 from 4 to 6 +move 6 from 5 to 9 +move 8 from 2 to 8 +move 3 from 5 to 7 +move 21 from 8 to 4 +move 16 from 4 to 9 +move 8 from 6 to 2 +move 4 from 6 to 1 +move 1 from 4 to 6 +move 2 from 4 to 8 +move 3 from 1 to 8 +move 2 from 4 to 6 +move 1 from 6 to 2 +move 3 from 8 to 4 +move 2 from 2 to 5 +move 2 from 5 to 7 +move 1 from 8 to 9 +move 1 from 4 to 9 +move 1 from 1 to 6 +move 3 from 6 to 3 +move 3 from 2 to 3 +move 1 from 4 to 6 +move 3 from 6 to 7 +move 10 from 9 to 7 +move 1 from 4 to 7 +move 6 from 8 to 3 +move 1 from 6 to 8 +move 2 from 2 to 5 +move 1 from 2 to 1 +move 1 from 8 to 9 +move 1 from 2 to 8 +move 1 from 1 to 9 +move 7 from 9 to 1 +move 1 from 8 to 5 +move 7 from 1 to 7 +move 3 from 5 to 8 +move 3 from 7 to 2 +move 1 from 8 to 4 +move 1 from 2 to 4 +move 2 from 4 to 6 +move 5 from 3 to 1 +move 9 from 7 to 2 +move 6 from 3 to 8 +move 8 from 2 to 7 +move 2 from 6 to 4 +move 2 from 1 to 7 +move 2 from 1 to 4 +move 24 from 7 to 4 +move 4 from 8 to 9 +move 2 from 7 to 5 +move 1 from 5 to 2 +move 1 from 3 to 8 +move 4 from 2 to 8 +move 13 from 9 to 2 +move 2 from 8 to 6 +move 3 from 9 to 6 +move 26 from 4 to 2 +move 1 from 5 to 7 +move 2 from 6 to 2 +move 2 from 4 to 1 +move 7 from 2 to 1 +move 15 from 2 to 6 +move 8 from 2 to 8 +move 4 from 6 to 8 +move 9 from 2 to 9 +move 13 from 6 to 7 +move 6 from 1 to 9 +move 2 from 2 to 4 +move 4 from 1 to 6 +move 3 from 8 to 3 +move 1 from 4 to 9 +move 2 from 6 to 7 +move 1 from 4 to 3 +move 3 from 3 to 2 +move 14 from 7 to 4 +move 5 from 9 to 5 +move 9 from 8 to 5 +move 7 from 9 to 6 +move 2 from 5 to 6 +move 2 from 9 to 2 +move 10 from 5 to 1 +move 1 from 3 to 1 +move 2 from 8 to 1 +move 1 from 9 to 2 +move 1 from 7 to 5 +move 4 from 2 to 1 +move 1 from 9 to 8 +move 3 from 4 to 1 +move 1 from 8 to 6 +move 12 from 1 to 5 +move 1 from 1 to 6 +move 1 from 7 to 5 +move 4 from 6 to 9 +move 2 from 2 to 4 +move 1 from 9 to 6 +move 1 from 1 to 5 +move 2 from 9 to 7 +move 10 from 6 to 5 +move 1 from 6 to 7 +move 20 from 5 to 1 +move 1 from 7 to 9 +move 2 from 9 to 1 +move 3 from 5 to 1 +move 2 from 8 to 4 +move 2 from 8 to 7 +move 1 from 5 to 9 +move 1 from 8 to 4 +move 22 from 1 to 7 +move 5 from 4 to 8 +move 1 from 5 to 9 +move 19 from 7 to 4 +move 2 from 9 to 1 +move 1 from 5 to 9 +move 10 from 1 to 8 +move 1 from 9 to 1 +move 1 from 8 to 3 +move 8 from 4 to 7 +move 1 from 5 to 6 +move 3 from 4 to 5 +move 1 from 5 to 9 +move 11 from 7 to 4 +move 4 from 4 to 9 +move 1 from 6 to 2 +move 1 from 3 to 9 +move 5 from 9 to 4 +move 5 from 7 to 9 +move 23 from 4 to 2 +move 17 from 2 to 7 +move 2 from 2 to 8 +move 4 from 4 to 7 +move 1 from 4 to 5 +move 2 from 5 to 2 +move 5 from 8 to 9 +move 5 from 2 to 7 +move 9 from 7 to 5 +move 11 from 9 to 2 +move 1 from 4 to 3 +move 5 from 8 to 7 +move 3 from 8 to 5 +move 2 from 1 to 3 +move 2 from 3 to 9 +move 1 from 5 to 8 +move 5 from 7 to 5 +move 15 from 5 to 4 +move 2 from 8 to 1 +move 2 from 5 to 1 +move 4 from 4 to 1 +move 1 from 8 to 7 +move 8 from 2 to 1 +move 4 from 2 to 8 +move 2 from 7 to 4 +move 5 from 8 to 6 +move 5 from 7 to 9 +move 4 from 6 to 5 +move 7 from 4 to 8 +move 1 from 6 to 1 +move 1 from 3 to 1 +move 2 from 5 to 1 +move 7 from 1 to 5 +move 5 from 1 to 3 +move 4 from 7 to 9 +move 4 from 3 to 9 +move 2 from 9 to 7 +move 6 from 9 to 2 +move 1 from 4 to 1 +move 1 from 3 to 5 +move 1 from 2 to 5 +move 5 from 9 to 4 +move 4 from 4 to 6 +move 1 from 8 to 9 +move 8 from 4 to 3 +move 7 from 7 to 3 +move 5 from 1 to 3 +move 11 from 5 to 9 +move 1 from 7 to 6 +move 2 from 3 to 5 +move 1 from 3 to 1 +move 3 from 6 to 2 +move 2 from 5 to 1 +move 2 from 1 to 2 +move 3 from 1 to 5 +move 5 from 9 to 2 +move 2 from 6 to 8 +move 2 from 3 to 8 +move 4 from 9 to 7 +move 3 from 5 to 2 +move 2 from 1 to 8 +move 1 from 9 to 8 +move 1 from 9 to 2 +move 4 from 7 to 9 +move 11 from 8 to 7 +move 1 from 8 to 2 +move 6 from 9 to 7 +move 3 from 7 to 1 +move 13 from 2 to 7 +move 24 from 7 to 1 +move 2 from 2 to 6 +move 1 from 8 to 3 +move 1 from 9 to 3 +move 5 from 2 to 4 +move 1 from 2 to 5 +move 1 from 6 to 2 +move 1 from 6 to 3 +move 1 from 2 to 4 +move 3 from 7 to 3 +move 2 from 1 to 7 +move 2 from 3 to 8 +move 2 from 7 to 8 +move 9 from 3 to 2 +move 3 from 4 to 8 +move 1 from 5 to 1 +move 9 from 2 to 1 +move 3 from 4 to 9 +move 1 from 7 to 8 +move 6 from 3 to 9 +move 2 from 1 to 5 +move 15 from 1 to 3 +move 13 from 3 to 9 +move 11 from 1 to 4 +move 5 from 4 to 1 +move 6 from 3 to 6 +move 4 from 4 to 8 +move 6 from 1 to 4 +move 1 from 5 to 2 +move 1 from 2 to 1 +move 3 from 4 to 2 +move 2 from 8 to 5 +move 2 from 4 to 2 +move 9 from 9 to 3 +move 9 from 3 to 5 +move 2 from 9 to 4 +move 5 from 2 to 6 +move 1 from 1 to 8 +move 1 from 4 to 1 +move 10 from 9 to 2 +move 9 from 2 to 4 +move 10 from 4 to 1 +move 3 from 1 to 3 +move 4 from 1 to 2 +move 5 from 2 to 4 +move 2 from 5 to 2 +move 4 from 1 to 7 +move 10 from 5 to 4 +move 2 from 2 to 4 +move 1 from 9 to 2 +move 2 from 3 to 5 +move 1 from 3 to 5 +move 3 from 6 to 7 +move 8 from 4 to 9 +move 6 from 6 to 1 +move 4 from 9 to 5 +move 2 from 9 to 1 +move 1 from 2 to 6 +move 6 from 5 to 2 +move 3 from 7 to 9 +move 4 from 8 to 2 +move 1 from 7 to 9 +move 1 from 5 to 3 +move 2 from 7 to 4 +move 1 from 7 to 1 +move 14 from 1 to 9 +move 1 from 1 to 9 +move 1 from 3 to 8 +move 3 from 2 to 5 +move 2 from 4 to 2 +move 6 from 8 to 1 +move 1 from 2 to 1 +move 5 from 1 to 9 +move 1 from 1 to 7 +move 2 from 8 to 5 +move 1 from 5 to 4 +move 1 from 6 to 1 +move 8 from 2 to 7 +move 2 from 6 to 1 +move 9 from 9 to 5 +move 11 from 4 to 8 +move 4 from 7 to 4 +move 6 from 4 to 6 +move 1 from 7 to 4 +move 6 from 6 to 7 +move 1 from 5 to 9 +move 6 from 8 to 9 +move 8 from 9 to 5 +move 1 from 4 to 5 +move 15 from 9 to 3 +move 3 from 1 to 4 +move 6 from 7 to 2 +move 3 from 4 to 9 +move 2 from 7 to 3 +move 1 from 7 to 3 +move 1 from 7 to 2 +move 2 from 8 to 1 +move 3 from 8 to 5 +move 2 from 1 to 7 +move 8 from 3 to 6 +move 3 from 6 to 5 +move 1 from 6 to 1 +move 10 from 5 to 7 +move 6 from 5 to 4 +move 4 from 2 to 4 +move 6 from 5 to 1 +move 6 from 1 to 8 +move 2 from 9 to 2 +move 2 from 9 to 7 +move 6 from 3 to 7 +move 1 from 3 to 5 +move 1 from 1 to 9 +move 2 from 8 to 1 +move 2 from 5 to 4 +move 3 from 3 to 7 +move 10 from 4 to 6 +move 1 from 9 to 7 +move 12 from 7 to 3 +move 12 from 3 to 8 +move 2 from 1 to 5 +move 1 from 1 to 3 +move 13 from 8 to 1 +move 7 from 7 to 1 +move 13 from 6 to 9 +move 1 from 7 to 4 +move 6 from 5 to 3 +move 3 from 4 to 3 +move 6 from 3 to 1 +move 10 from 9 to 4 +move 2 from 7 to 6 +move 8 from 1 to 9 +move 3 from 2 to 9 +move 1 from 3 to 5 +move 1 from 3 to 5 +move 1 from 1 to 4 +move 6 from 9 to 3 +move 2 from 6 to 7 +move 4 from 9 to 5 +move 4 from 1 to 6 +move 1 from 2 to 4 +move 6 from 1 to 4 +move 3 from 9 to 3 +move 3 from 6 to 8 +move 3 from 8 to 7 +move 5 from 5 to 1 +move 1 from 3 to 9 +move 1 from 9 to 5 +move 1 from 3 to 2 +move 2 from 5 to 1 +move 1 from 6 to 9 +move 1 from 6 to 3 +move 2 from 9 to 7 +move 2 from 8 to 1 +move 1 from 3 to 2 +move 1 from 2 to 5 +move 1 from 7 to 1 +move 7 from 7 to 9 +move 12 from 1 to 9 +move 1 from 5 to 2 +move 1 from 7 to 1 +move 13 from 4 to 7 +move 1 from 9 to 4 +move 5 from 7 to 3 +move 4 from 9 to 1 +move 8 from 7 to 9 +move 3 from 2 to 3 +move 4 from 3 to 7 +move 5 from 4 to 6 +move 3 from 9 to 4 +move 10 from 1 to 5 +move 3 from 4 to 7 +move 16 from 9 to 2 +move 3 from 9 to 2 +move 6 from 5 to 3 +move 4 from 6 to 2 +move 1 from 4 to 6 +move 2 from 6 to 8 +move 1 from 5 to 2 +move 1 from 5 to 8 +move 7 from 7 to 2 +move 16 from 2 to 1 +move 1 from 5 to 1 +move 10 from 2 to 8 +move 14 from 8 to 5 +move 2 from 2 to 6 +move 1 from 2 to 5 +move 2 from 2 to 1 +move 8 from 1 to 7 +move 4 from 1 to 7 +move 2 from 1 to 7 +move 5 from 3 to 2 +move 1 from 1 to 6 +move 2 from 2 to 5 +move 4 from 1 to 7 +move 1 from 2 to 8 +move 1 from 2 to 8 +move 3 from 6 to 7 +move 10 from 7 to 5 +move 1 from 2 to 8 +move 27 from 5 to 9 +move 1 from 5 to 6 +move 1 from 6 to 4 +move 1 from 4 to 3 +move 3 from 3 to 7 +move 4 from 3 to 6 +move 2 from 6 to 4 +move 3 from 8 to 1 +move 2 from 6 to 1 +move 12 from 7 to 8 +move 2 from 3 to 9 +move 1 from 9 to 2 +move 1 from 2 to 8 +move 2 from 1 to 2 +move 6 from 3 to 8 +move 1 from 7 to 4 +move 15 from 9 to 5 +move 7 from 9 to 4 +move 1 from 2 to 1 +move 16 from 8 to 2 +move 8 from 5 to 2 +move 24 from 2 to 9 +move 3 from 1 to 2 +move 24 from 9 to 1 +move 5 from 5 to 9 +move 3 from 4 to 1 +move 1 from 7 to 6 +move 1 from 6 to 3 +move 1 from 3 to 2 +move 3 from 2 to 3 +move 1 from 5 to 6 +move 1 from 2 to 7 diff --git a/day5/test.in.txt b/day5/test.in.txt new file mode 100644 index 0000000..84933bb --- /dev/null +++ b/day5/test.in.txt @@ -0,0 +1,9 @@ + [D] +[N] [C] +[Z] [M] [P] + 1 2 3 + +move 1 from 2 to 1 +move 3 from 1 to 3 +move 2 from 2 to 1 +move 1 from 1 to 2 diff --git a/main.go b/main.go index 746c652..708a12e 100644 --- a/main.go +++ b/main.go @@ -4,9 +4,15 @@ import ( "flag" "fmt" "log" - day1_calorie_counting "snikolov.me/aoc2022/day1" - "snikolov.me/aoc2022/utils" "time" + + "snikolov.me/aoc2022/day1" + "snikolov.me/aoc2022/day2" + "snikolov.me/aoc2022/day3" + "snikolov.me/aoc2022/day4" + "snikolov.me/aoc2022/day5" + + "snikolov.me/aoc2022/utils" ) type Args struct { @@ -39,7 +45,11 @@ func main() { func solve(args Args, inputFileName string) { solvers := map[int]utils.Solver{ - 1: &day1_calorie_counting.Solver{}, + 1: &day1.Solver{}, + 2: &day2.Solver{}, + 3: &day3.Solver{}, + 4: &day4.Solver{}, + 5: &day5.Solver{}, } solver, ok := solvers[args.DayNumber] if !ok { @@ -54,7 +64,7 @@ func solve(args Args, inputFileName string) { log.Fatalf("Could not read input for day %d: %s", args.DayNumber, err) } - var solution int + var solution any switch args.PartNumber { case 1: solution = solver.SolvePart1() diff --git a/utils/set.go b/utils/set.go new file mode 100644 index 0000000..f550e28 --- /dev/null +++ b/utils/set.go @@ -0,0 +1,31 @@ +package utils + +type Set[T comparable] interface { + Items() []T + // Union(set Set[T]) Set[T] + // Intersection(set Set[T]) Set[T] + // ContainsItem(item T) bool + // ContainsSubset(set Set[T]) bool +} + +type set[T comparable] struct { + m map[T]bool +} + +func (s *set[T]) Items() []T { + r := make([]T, len(s.m)) + i := 0 + for item, _ := range s.m { + r[i] = item + i += 1 + } + return r +} + +func NewSet[T comparable](items ...T) Set[T] { + m := make(map[T]bool, len(items)) + for _, item := range items { + m[item] = true + } + return &set[T]{m} +} diff --git a/utils/set_test.go b/utils/set_test.go new file mode 100644 index 0000000..d3d4148 --- /dev/null +++ b/utils/set_test.go @@ -0,0 +1,21 @@ +package utils + +import ( + "reflect" + "testing" +) + +func TestSetItems(t *testing.T) { + s := NewSet(1, 2, 3, 2, 2, 1) + + if !reflect.DeepEqual(s.Items(), []int{1, 2, 3}) { + t.Error("new set does not contain initial items") + } + + items := []string{"hello", "there", "world", "sta", "satasr", "aaaaa", "tawfptars"} + s1 := NewSet(items...) + + if !reflect.DeepEqual(s1.Items(), items) { + t.Error("new set does not contain initial items") + } +} diff --git a/utils/utils.go b/utils/utils.go index 76f2e85..a09b547 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -11,8 +11,8 @@ import ( type Solver interface { ParseInput(input []string) - SolvePart1() int - SolvePart2() int + SolvePart1() any + SolvePart2() any } func ReadInput(inputFileName string) ([]string, error) {