Day 25
This commit is contained in:
93
day25/common/balloons.go
Normal file
93
day25/common/balloons.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
18
day25/ex1/main.go
Normal file
18
day25/ex1/main.go
Normal file
@@ -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()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user