package main import ( "bufio" "fmt" "os" ) func countUniqueAnswers(answers []string) int { found := make(map[rune]int) for _, a := range answers { for _, r := range a { found[r]++ } } return len(found) } func countAllSharedAnswers(answers []string) int { found := make(map[rune]int) for _, a := range answers { for _, r := range a { found[r]++ } } var count int for _, i := range found { if i == len(answers) { count++ } } return count } // Task1 ... func Task1(input [][]string) int { var result int for _, answers := range input { result += countUniqueAnswers(answers) } return result } // Task2 ... func Task2(input [][]string) int { var result int for _, answers := range input { result += countAllSharedAnswers(answers) } return result } func main() { input := make([][]string, 0, 100) file, _ := os.Open("input.txt") scanner := bufio.NewScanner(file) work := make([]string, 0, 10) for scanner.Scan() { line := scanner.Text() if line == "" { input = append(input, work) work = make([]string, 0, 10) continue } work = append(work, scanner.Text()) } file.Close() if len(work) > 0 { input = append(input, work) } result := Task1(input) fmt.Printf("Task 1: %d\n", result) result = Task2(input) fmt.Printf("Task 2: %d\n", result) }