package main import ( "bufio" "bytes" "fmt" "io/ioutil" "log" ) func main() { f, err := ioutil.ReadFile("input") if err != nil { panic(err) } reader := bufio.NewReader(bytes.NewReader(f)) var valid int for { line, err := reader.ReadString('\n') if err != nil { break } var pw string var min, max int var char rune n, err := fmt.Sscanf(line, "%d-%d %c: %s", &min, &max, &char, &pw) if err != nil { panic(err) } if n != 4 { panic("mismatched Scanf") } var count int for _, currentChar := range pw { if currentChar == char { count++ } } if count >= min && count <= max { valid++ } } log.Printf("%d valid entries", valid) }