-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday5.go
87 lines (76 loc) · 1.34 KB
/
day5.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main
import (
"bufio"
"fmt"
"strings"
)
func isNice1(ln string) bool {
return hasThreeVowels(ln) && isValid(ln) && hasPair(ln)
}
func hasThreeVowels(ln string) bool {
as := strings.Count(ln, "a")
es := strings.Count(ln, "e")
is := strings.Count(ln, "i")
os := strings.Count(ln, "o")
us := strings.Count(ln, "u")
return as+es+is+os+us > 2
}
func isValid(ln string) bool {
as := strings.Count(ln, "ab")
es := strings.Count(ln, "cd")
is := strings.Count(ln, "pq")
us := strings.Count(ln, "xy")
return as+es+is+us == 0
}
func hasPair(ln string) bool {
c := ' '
for _, rune := range ln {
if rune == c {
return true
}
c = rune
}
return false
}
func isNice2(ln string) bool {
return twoPair(ln) && surround(ln)
}
func twoPair(ln string) bool {
for i := 0; i < len(ln)-2; i++ {
check := ln[i : i+2]
c := strings.Count(ln, check)
if c > 1 {
return true
}
}
return false
}
func surround(ln string) bool {
for i := 0; i < len(ln)-2; i++ {
if ln[i] == ln[i+2] {
return true
}
}
return false
}
func onScan(scan *bufio.Scanner) {
c1 := 0
c2 := 0
for scan.Scan() {
ln := scan.Text()
nice1 := isNice1(ln)
nice2 := isNice2(ln)
if nice1 {
c1++
}
if nice2 {
c2++
}
}
fmt.Println("Part 1 : ", c1)
fmt.Println("Part 2 : ", c2)
}
// Day5 is here
func Day5() {
scan("data/day5.txt", onScan)
}