66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"AoC2020/helper"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
args := os.Args[1:]
|
||
|
input, err := helper.GetFile(args[0])
|
||
|
if err != nil {
|
||
|
fmt.Println(err)
|
||
|
}
|
||
|
groups := strings.Split(input, "\n\n")
|
||
|
fmt.Println(day6(groups))
|
||
|
fmt.Println(day6Part2(groups))
|
||
|
}
|
||
|
|
||
|
func day6(groups []string) int {
|
||
|
var count int
|
||
|
for _, group := range groups {
|
||
|
count += len(getYesAnsweredQuestions(group))
|
||
|
}
|
||
|
return count
|
||
|
}
|
||
|
|
||
|
func day6Part2(groups []string) int {
|
||
|
var count int
|
||
|
for _, group := range groups {
|
||
|
count += getQuestionsEveryoneAnsweredYes(group)
|
||
|
}
|
||
|
return count
|
||
|
}
|
||
|
|
||
|
func getYesAnsweredQuestions(group string) string {
|
||
|
var answeredQuestions string
|
||
|
persons := strings.Split(group, "\n")
|
||
|
for _, person := range persons {
|
||
|
for _, answer := range person {
|
||
|
if !strings.Contains(answeredQuestions, string(answer)) {
|
||
|
answeredQuestions += string(answer)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return answeredQuestions
|
||
|
}
|
||
|
|
||
|
func getQuestionsEveryoneAnsweredYes(group string) int {
|
||
|
var questions [26]int
|
||
|
persons := strings.Split(group, "\n")
|
||
|
for _, person := range persons {
|
||
|
for _, answer := range person {
|
||
|
questions[answer-97] += 1
|
||
|
}
|
||
|
}
|
||
|
count := 0
|
||
|
for _,question := range questions {
|
||
|
if question == len(persons){
|
||
|
count++
|
||
|
}
|
||
|
}
|
||
|
return count
|
||
|
}
|