package main import ( "bufio" "fmt" "os" ) // Input ... type Input struct { ruleMin int ruleMax int ruleRune rune password string } // Task1 ... func Task1(input []Input) int { var result int for _, i := range input { var count int for _, r := range i.password { if r == i.ruleRune { count++ } } if count >= i.ruleMin && count <= i.ruleMax { result++ } } return result } // Task2 ... func Task2(input []Input) int { var result int for _, i := range input { a := rune(i.password[i.ruleMin-1]) b := rune(i.password[i.ruleMax-1]) if (a == i.ruleRune) != (b == i.ruleRune) { result++ } } return result } func main() { input := make([]Input, 0, 100) file, _ := os.Open("input.txt") scanner := bufio.NewScanner(file) for scanner.Scan() { var i Input fmt.Sscanf( scanner.Text(), "%d-%d %c: %s", &i.ruleMin, &i.ruleMax, &i.ruleRune, &i.password, ) input = append(input, i) } file.Close() input1 := make([]Input, len(input)) copy(input1, input) result := Task1(input1) fmt.Printf("Task 1: %d\n", result) input2 := make([]Input, len(input)) copy(input2, input) result = Task2(input2) fmt.Printf("Task 2: %d\n", result) }