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 }