Day4 WIP
This commit is contained in:
parent
f3da58723c
commit
3833a1e433
|
@ -0,0 +1,99 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"../helper"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
args := os.Args[1:]
|
||||||
|
input, err := helper.GetFile(args[0])
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
reqFields := []string{"byr:", "iyr:", "eyr:", "hgt:", "hcl:", "ecl:", "pid:"}
|
||||||
|
documents := strings.Split(input, "\n\n")
|
||||||
|
count := 0
|
||||||
|
countPart2 := 0
|
||||||
|
for _, document := range documents {
|
||||||
|
if isValid(document, reqFields) {
|
||||||
|
count++
|
||||||
|
if isValidPart2(document) {
|
||||||
|
countPart2++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(count)
|
||||||
|
fmt.Println(countPart2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func isValid(document string, reqFields []string) bool {
|
||||||
|
for _, reqField := range reqFields {
|
||||||
|
match, err := regexp.MatchString(reqField, document)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
if !match {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func isValidPart2(document string) bool {
|
||||||
|
fields := strings.Fields(document)
|
||||||
|
for i := 0; i < len(fields); i++ {
|
||||||
|
field := fields[i]
|
||||||
|
pair := strings.Split(field, ":")
|
||||||
|
switch pair[0] {
|
||||||
|
case "byr":
|
||||||
|
if !checkYear(pair[1], 2002, 1920) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case "iyr":
|
||||||
|
if !checkYear(pair[1], 2020, 2010) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case "eyr":
|
||||||
|
if !checkYear(pair[1], 2030, 2020) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case "hgt":
|
||||||
|
r, _ := regexp.Compile("(cm|in)")
|
||||||
|
switch r.FindString(pair[1]) {
|
||||||
|
case "cm":
|
||||||
|
if !checkYear(pair[1][:len(pair[1])-2], 193, 150) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case "in":
|
||||||
|
if !checkYear(pair[1][:len(pair[1])-2], 76, 59) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case "hcl":
|
||||||
|
if match, _ := regexp.MatchString("^#[a-f0-9]{6}", pair[1]); !match{
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case "ecl":
|
||||||
|
if match, _ := regexp.MatchString(pair[1], "amb blue brn gry grn hzl oth"); !match{
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case "pid":
|
||||||
|
if match, _ := regexp.MatchString("[0-9]{8}", pair[1]); !match{
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkYear(year string, max int, min int) bool {
|
||||||
|
number, err := strconv.Atoi(year)
|
||||||
|
return err == nil && number >= min && number <= max
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,13 @@
|
||||||
|
ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
|
||||||
|
byr:1937 iyr:2017 cid:147 hgt:183cm
|
||||||
|
|
||||||
|
iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
|
||||||
|
hcl:#cfa07d byr:1929
|
||||||
|
|
||||||
|
hcl:#ae17e1 iyr:2013
|
||||||
|
eyr:2024
|
||||||
|
ecl:brn pid:760753108 byr:1931
|
||||||
|
hgt:179cm
|
||||||
|
|
||||||
|
hcl:#cfa07d eyr:2025 pid:166559648
|
||||||
|
iyr:2011 ecl:brn hgt:59in
|
|
@ -0,0 +1,13 @@
|
||||||
|
eyr:1972 cid:100
|
||||||
|
hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926
|
||||||
|
|
||||||
|
iyr:2019
|
||||||
|
hcl:#602927 eyr:1967 hgt:170cm
|
||||||
|
ecl:grn pid:012533040 byr:1946
|
||||||
|
|
||||||
|
hcl:dab227 iyr:2012
|
||||||
|
ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277
|
||||||
|
|
||||||
|
hgt:59cm ecl:zzz
|
||||||
|
eyr:2038 hcl:74454a iyr:2023
|
||||||
|
pid:3556412378 byr:2007
|
|
@ -0,0 +1,12 @@
|
||||||
|
pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
|
||||||
|
hcl:#623a2f
|
||||||
|
|
||||||
|
eyr:2029 ecl:blu cid:129 byr:1989
|
||||||
|
iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm
|
||||||
|
|
||||||
|
hcl:#888785
|
||||||
|
hgt:164cm byr:2001 iyr:2015 cid:88
|
||||||
|
pid:545766238 ecl:hzl
|
||||||
|
eyr:2022
|
||||||
|
|
||||||
|
iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719
|
|
@ -15,6 +15,14 @@ func GetInput(filename string) ([]string, error) {
|
||||||
return lines, err
|
return lines, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetFile(filename string) (string, error) {
|
||||||
|
content, err := ioutil.ReadFile(filename)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(content), err
|
||||||
|
}
|
||||||
|
|
||||||
func MapToNumber(strings []string) ([]int, error) {
|
func MapToNumber(strings []string) ([]int, error) {
|
||||||
var numbers []int
|
var numbers []int
|
||||||
for _, line := range strings {
|
for _, line := range strings {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user