package main import ( "fmt" "io" "log" "os" "strconv" "strings" ) func main() { var input []string var readInp string for { _, err := fmt.Scan(&readInp) if err != nil { if err != io.EOF { log.Fatal(err) } break } input = append(input, readInp) } var lights [][]int for i := 0; i < 1000; i++ { lights = append(lights, make([]int, 1000)) } for i := range input { if input[i] == "on" || input[i] == "off" || input[i] == "toggle" { stX, stY := parseLocations(input[i+1]) endX, endY := parseLocations(input[i+3]) for ix := stX; ix <= endX; ix++ { for iy := stY; iy <= endY; iy++ { if input[i] == "on" { lights[ix][iy]++ } else if input[i] == "off" { if lights[ix][iy] > 0 { lights[ix][iy]-- } } else if input[i] == "toggle" { lights[ix][iy] += 2 } } } } } var brightness int for i := 0; i < 1000; i++ { for j := 0; j < 1000; j++ { brightness += lights[i][j] } } fmt.Printf("Brightness: %d\n", brightness) } func parseLocations(s string) (int, int) { dirSplit := strings.Split(s, ",") return assertAtoi(dirSplit[0]), assertAtoi(dirSplit[1]) } func assertAtoi(s string) int { ret, err := strconv.Atoi(s) if err != nil { fmt.Println("Error in Atoi: " + s) os.Exit(1) } return ret }