From e84c13c68968a51c9d81dacae36db4188e61a9f7 Mon Sep 17 00:00:00 2001 From: Pierre Jeanjean Date: Fri, 2 Dec 2022 07:41:32 +0100 Subject: [PATCH] Day 2 --- day02/common/round.go | 47 +++++++++++++++++++++++++++++++++++++++++++ day02/ex1/main.go | 46 ++++++++++++++++++++++++++++++++++++++++++ day02/ex2/main.go | 47 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 day02/common/round.go create mode 100644 day02/ex1/main.go create mode 100644 day02/ex2/main.go diff --git a/day02/common/round.go b/day02/common/round.go new file mode 100644 index 0000000..59d34f2 --- /dev/null +++ b/day02/common/round.go @@ -0,0 +1,47 @@ +package common + +type Move int + +const ( + Rock Move = iota + Paper + Scissor +) + +type Round struct { + Opponent Move + Response Move +} + +func (round Round) GetScore() int { + score := 0 + switch round { + case Round{Rock, Rock}: + score += 4 + case Round{Rock, Paper}: + score += 8 + case Round{Rock, Scissor}: + score += 3 + case Round{Paper, Rock}: + score += 1 + case Round{Paper, Paper}: + score += 5 + case Round{Paper, Scissor}: + score += 9 + case Round{Scissor, Rock}: + score += 7 + case Round{Scissor, Paper}: + score += 2 + case Round{Scissor, Scissor}: + score += 6 + } + return score +} + +func GetTotalScore(rounds []Round) int { + score := 0 + for _, round := range rounds { + score += round.GetScore() + } + return score +} diff --git a/day02/ex1/main.go b/day02/ex1/main.go new file mode 100644 index 0000000..e99f582 --- /dev/null +++ b/day02/ex1/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "aoc2022/day02/common" +) + +func Parse(scanner bufio.Scanner) []common.Round { + rounds := []common.Round{} + + for scanner.Scan() { + line := scanner.Text() + + var opponent common.Move + switch line[0] { + case 'A': + opponent = common.Rock + case 'B': + opponent = common.Paper + case 'C': + opponent = common.Scissor + } + + var response common.Move + switch line[2] { + case 'X': + response = common.Rock + case 'Y': + response = common.Paper + case 'Z': + response = common.Scissor + } + + rounds = append(rounds, common.Round{Opponent: opponent, Response: response}) + } + + return rounds +} + +func main() { + rounds := Parse(*bufio.NewScanner(os.Stdin)) + + fmt.Println(common.GetTotalScore(rounds)) +} diff --git a/day02/ex2/main.go b/day02/ex2/main.go new file mode 100644 index 0000000..522d533 --- /dev/null +++ b/day02/ex2/main.go @@ -0,0 +1,47 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "aoc2022/day02/common" +) + +func Parse(scanner bufio.Scanner) []common.Round { + rounds := []common.Round{} + + for scanner.Scan() { + line := scanner.Text() + + var round common.Round + switch line { + case "A X": + round = common.Round{Opponent: common.Rock, Response: common.Scissor} + case "A Y": + round = common.Round{Opponent: common.Rock, Response: common.Rock} + case "A Z": + round = common.Round{Opponent: common.Rock, Response: common.Paper} + case "B X": + round = common.Round{Opponent: common.Paper, Response: common.Rock} + case "B Y": + round = common.Round{Opponent: common.Paper, Response: common.Paper} + case "B Z": + round = common.Round{Opponent: common.Paper, Response: common.Scissor} + case "C X": + round = common.Round{Opponent: common.Scissor, Response: common.Paper} + case "C Y": + round = common.Round{Opponent: common.Scissor, Response: common.Scissor} + case "C Z": + round = common.Round{Opponent: common.Scissor, Response: common.Rock} + } + rounds = append(rounds, round) + } + + return rounds +} + +func main() { + rounds := Parse(*bufio.NewScanner(os.Stdin)) + + fmt.Println(common.GetTotalScore(rounds)) +}