Files
advent-of-code-2022/day25/common/balloons.go
2022-12-25 19:03:28 +01:00

94 lines
1.6 KiB
Go

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
}