94 lines
1.6 KiB
Go
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
|
|
}
|