2020 Day 2 Complete
This commit is contained in:
parent
cd94bf4a8f
commit
0642c298f3
1000
2020/day02/input
Normal file
1000
2020/day02/input
Normal file
File diff suppressed because it is too large
Load Diff
94
2020/day02/main.go
Normal file
94
2020/day02/main.go
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
inp := h.StdinToStringSlice()
|
||||||
|
validate(inp, h.OptArgNumber(1, "1"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func validate(input []string, p string) {
|
||||||
|
policy := h.Atoi(p)
|
||||||
|
var good, bad []string
|
||||||
|
for _, v := range input {
|
||||||
|
if policy == 1 {
|
||||||
|
if validSledRentalPolicy(v) {
|
||||||
|
good = append(good, v)
|
||||||
|
} else {
|
||||||
|
bad = append(bad, v)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if validTobogganPolicy(v) {
|
||||||
|
good = append(good, v)
|
||||||
|
} else {
|
||||||
|
bad = append(bad, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Printf("There are %d valid passwords\n", len(good))
|
||||||
|
}
|
||||||
|
|
||||||
|
func validSledRentalPolicy(line string) bool {
|
||||||
|
min := -1
|
||||||
|
max := -1
|
||||||
|
req := ""
|
||||||
|
var buff string
|
||||||
|
for i := 0; i < len(line); i++ {
|
||||||
|
if req != "" {
|
||||||
|
buff = buff + string(line[i])
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
switch line[i] {
|
||||||
|
case '-':
|
||||||
|
min = h.Atoi(buff)
|
||||||
|
buff = ""
|
||||||
|
case ' ':
|
||||||
|
if max == -1 {
|
||||||
|
max = h.Atoi(buff)
|
||||||
|
buff = ""
|
||||||
|
}
|
||||||
|
case ':':
|
||||||
|
req = buff
|
||||||
|
buff = ""
|
||||||
|
default:
|
||||||
|
buff = buff + string(line[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reqCount := strings.Count(buff, req)
|
||||||
|
return reqCount >= min && reqCount <= max
|
||||||
|
}
|
||||||
|
|
||||||
|
func validTobogganPolicy(line string) bool {
|
||||||
|
idx1 := -1
|
||||||
|
idx2 := -1
|
||||||
|
req := byte(' ')
|
||||||
|
var buff string
|
||||||
|
for i := 0; i < len(line); i++ {
|
||||||
|
if req != ' ' && line[i] != ' ' {
|
||||||
|
buff = buff + string(line[i])
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
switch line[i] {
|
||||||
|
case '-':
|
||||||
|
idx1 = h.Atoi(buff)
|
||||||
|
buff = ""
|
||||||
|
case ' ':
|
||||||
|
if idx2 == -1 {
|
||||||
|
idx2 = h.Atoi(buff)
|
||||||
|
buff = ""
|
||||||
|
}
|
||||||
|
case ':':
|
||||||
|
req = line[i-1]
|
||||||
|
buff = ""
|
||||||
|
default:
|
||||||
|
buff = buff + string(line[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
match1, match2 := buff[idx1-1] == req, buff[idx2-1] == req
|
||||||
|
return match1 != match2
|
||||||
|
}
|
3
2020/day02/testinput
Normal file
3
2020/day02/testinput
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
1-3 a: abcde
|
||||||
|
1-3 b: cdefg
|
||||||
|
2-9 c: ccccccccc
|
@ -76,6 +76,13 @@ func GetArgNumber(i int) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func OptArgNumber(i int, def string) string {
|
||||||
|
if len(os.Args) > i {
|
||||||
|
return os.Args[i]
|
||||||
|
}
|
||||||
|
return def
|
||||||
|
}
|
||||||
|
|
||||||
func StdinToIntSlice() []int {
|
func StdinToIntSlice() []int {
|
||||||
var ret []int
|
var ret []int
|
||||||
st := StdinToStringSlice()
|
st := StdinToStringSlice()
|
||||||
|
Loading…
Reference in New Issue
Block a user