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)
}