From 8577bfc57cd611e83a3f12f6472a2884b98e130d Mon Sep 17 00:00:00 2001 From: RhiobeT Date: Sun, 25 Dec 2022 19:03:28 +0100 Subject: [PATCH] Day 25 --- day25/common/balloons.go | 93 ++++++++++++++++++++++++++++++++++++++++ day25/ex1/main.go | 18 ++++++++ 2 files changed, 111 insertions(+) create mode 100644 day25/common/balloons.go create mode 100644 day25/ex1/main.go diff --git a/day25/common/balloons.go b/day25/common/balloons.go new file mode 100644 index 0000000..92eeb20 --- /dev/null +++ b/day25/common/balloons.go @@ -0,0 +1,93 @@ +package common + +import ( + "bufio" + "fmt" +) + + +type Number []int8 + +func (number Number) Sum(otherNumber Number) Number { + sum := Number{} + var hold, n, o int8 + longest := len(number) + if len(otherNumber) > longest { + longest = len(otherNumber) + } + + for i := 0; i < longest; i++ { + n = 0 + o = 0 + if i < len(number) { + n = number[i] + } + if i < len(otherNumber) { + o = otherNumber[i] + } + current := n + o + hold + if current <= 2 && current >= -2 { + hold = 0 + sum = append(sum, current) + } else if current > 2 { + hold = 1 + sum = append(sum, current - 5) + } else { + hold = -1 + sum = append(sum, 5 + current) + } + } + sum = append(sum, hold) + + for sum[len(sum)-1] == 0 { + sum = sum[:len(sum)-1] + } + + return sum +} + +func (number Number) Print() { + for i := len(number) - 1; i >= 0; i-- { + switch number[i] { + case -2: + fmt.Print("=") + case -1: + fmt.Print("-") + case 0: + fmt.Print("0") + case 1: + fmt.Print("1") + case 2: + fmt.Print("2") + } + } + fmt.Println() +} + + +func Parse(scanner bufio.Scanner) []Number { + numbers := []Number{} + + for scanner.Scan() { + line := scanner.Text() + number := Number{} + + for i := len(line) - 1; i >= 0; i-- { + switch line[i] { + case '2': + number = append(number, 2) + case '1': + number = append(number, 1) + case '0': + number = append(number, 0) + case '-': + number = append(number, -1) + case '=': + number = append(number, -2) + } + } + numbers = append(numbers, number) + } + + return numbers +} diff --git a/day25/ex1/main.go b/day25/ex1/main.go new file mode 100644 index 0000000..86ebc58 --- /dev/null +++ b/day25/ex1/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "aoc2022/day25/common" + "bufio" + "os" +) + +func main() { + numbers := common.Parse(*bufio.NewScanner(os.Stdin)) + + sum := common.Number{0} + for _, number := range numbers { + sum = sum.Sum(number) + } + + sum.Print() +}