package main import ( "bufio" "fmt" "os" "strconv" "strings" ) // cat input | go run 8.go func main() { scanner := bufio.NewScanner(os.Stdin) registers := make(map[string]int) maxEverVal := 0 for scanner.Scan() { s := strings.Split(scanner.Text(), " ") register := s[0] instruction := s[1] data, _ := strconv.Atoi(s[2]) condition := s[3] conditionRegister := s[4] conditionTest := s[5] conditionData, _ := strconv.Atoi(s[6]) _, present := registers[register] if !present { registers[register] = 0 } _, present = registers[conditionRegister] if !present { registers[conditionRegister] = 0 } fmt.Println(s) fmt.Println(registers) pass := false if condition == "if" { switch conditionTest { case "==": pass = registers[conditionRegister] == conditionData case ">": pass = registers[conditionRegister] > conditionData case "<": pass = registers[conditionRegister] < conditionData case "<=": pass = registers[conditionRegister] <= conditionData case ">=": pass = registers[conditionRegister] >= conditionData case "!=": pass = registers[conditionRegister] != conditionData default: fmt.Println("Condition failed!", s) } if pass { switch instruction { case "inc": registers[register] += data case "dec": registers[register] -= data default: fmt.Println("Invalid instruction", s) } if registers[register] > maxEverVal { maxEverVal = registers[register] } } } else { fmt.Println("Invalid condition", s) } } maxVal := 0 maxReg := "" for k, v := range registers { if v > maxVal { maxVal = v maxReg = k } } fmt.Println(registers) fmt.Println(maxVal, maxReg, maxEverVal) }