73 lines
985 B
Go
73 lines
985 B
Go
package aoc2015
|
|
|
|
import (
|
|
"aoc/internal/utility"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
const vowels = "aeiou"
|
|
|
|
func day05part1(in string) int {
|
|
m := utility.RuneMap(in)
|
|
|
|
inVowels := 0
|
|
for _, v := range vowels {
|
|
inVowels += m[v]
|
|
}
|
|
if inVowels < 3 {
|
|
return 0
|
|
}
|
|
|
|
doubled := false
|
|
for i := 1; i < len(in); i++ {
|
|
if in[i-1] == in[i] {
|
|
doubled = true
|
|
break
|
|
}
|
|
}
|
|
if !doubled {
|
|
return 0
|
|
}
|
|
|
|
for _, set := range []string{"ab", "cd", "pq", "xy"} {
|
|
if strings.Contains(in, set) {
|
|
return 0
|
|
}
|
|
}
|
|
|
|
return 1
|
|
}
|
|
|
|
func day05part2(in string) int {
|
|
doubled := false
|
|
for i := 1; i < len(in); i++ {
|
|
if strings.Contains(in[i+1:], in[i-1:i+1]) {
|
|
doubled = true
|
|
break
|
|
}
|
|
}
|
|
if !doubled {
|
|
return 0
|
|
}
|
|
|
|
for i := 2; i < len(in); i++ {
|
|
if in[i-2] == in[i] {
|
|
return 1
|
|
}
|
|
}
|
|
|
|
return 0
|
|
}
|
|
|
|
func day05() {
|
|
in := utility.GetLines("input/2015/05")
|
|
var p1, p2 int
|
|
for _, line := range in {
|
|
p1 += day05part1(line)
|
|
p2 += day05part2(line)
|
|
}
|
|
fmt.Println(p1)
|
|
fmt.Println(p2)
|
|
}
|