-
Notifications
You must be signed in to change notification settings - Fork 0
/
day6.go
67 lines (61 loc) · 1.47 KB
/
day6.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main
import (
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
i, err := ioutil.ReadFile("input.txt")
if err != nil {
os.Exit(1)
}
input := string(i)
fmt.Printf("Part 1: %v\n", SolveDay6Part1(input))
fmt.Printf("Part 2: %v\n", SolveDay6Part2(input))
}
//SolveDay6Part1 returns the sum of yes answers of groups
func SolveDay6Part1(i string) (s int) {
for _, answerGroup := range strings.Split(i, "\n\n") {
s = len(deleteDuplicates(strings.Replace(answerGroup, "\n", "", -1)))
}
return
}
//SolveDay6Part2 returns the sum of answers that in one croup all answered with yes
func SolveDay6Part2(i string) (s int) {
for _, answerGroup := range strings.Split(i, "\n\n") {
cur := make(map[int32]int)
answerGroupAnswers := stringListToSlice(answerGroup)
for _, answers := range answerGroupAnswers {
answers = deleteDuplicates(answers)
for _, char := range answers {
cur[char]
}
}
for _, answerCount := range cur {
if answerCount == len(answerGroupAnswers) {
s
}
}
}
return
}
func deleteDuplicates(i string) (output string) {
cur := make(map[int32]bool)
for _, chars := range i {
if cur[chars] {
continue
}
cur[chars] = true
output = output string(chars)
}
return
}
//Helper functions
//stringListToSlice converts the list of strings (each string one row) to a slice
func stringListToSlice(list string) (s []string) {
for _, line := range strings.Split(strings.TrimSuffix(list, "\n"), "\n") {
s = append(s, line)
}
return
}