packagemainimport("bufio""fmt""io""os""regexp""strconv""strings")varrequiredAttributes=[]string{"byr","iyr","eyr","hgt","hcl","ecl","pid"}funcisValid(passportmap[string]string)bool{for_,attribute:=rangerequiredAttributes{if_,exists:=passport[attribute];!exists{returnfalse}}returntrue}funcexists(slice[]string,valstring)bool{for_,item:=rangeslice{ifitem==val{returntrue}}returnfalse}funcvalidateRange(valstring,lower,upperint)bool{num,err:=strconv.Atoi(val)returnerr==nil&&num>=lower&&num<=upper}funcisValidV2(passportmap[string]string)bool{forattr,val:=rangepassport{switchattr{case"byr":if!validateRange(val,1920,2002){returnfalse}case"iyr":if!validateRange(val,2010,2020){returnfalse}case"eyr":if!validateRange(val,2020,2030){returnfalse}case"hgt":ifstrings.HasSuffix(val,"cm"){if!validateRange(strings.TrimSuffix(val,"cm"),150,193){returnfalse}}elseifstrings.HasSuffix(val,"in"){if!validateRange(strings.TrimSuffix(val,"in"),59,76){returnfalse}}else{returnfalse}case"hcl":ifmatch,_:=regexp.MatchString("^#[0-9a-f]{6}$",val);!match{returnfalse}case"ecl":eyeColors:=[]string{"amb","blu","brn","gry","grn","hzl","oth"}if!exists(eyeColors,val){returnfalse}case"pid":ifmatch,_:=regexp.MatchString("^[0-9]{9}$",val);!match{returnfalse}}}returntrue}funcmain(){reader:=bufio.NewReader(os.Stdin)passport:=make(map[string]string,8)numValid,numValidV2:=0,0for{varlinestringline,err:=reader.ReadString('\n')iferr==io.EOF{break}line=strings.TrimSpace(line)iflen(line)==0{// passport completeifisValid(passport){numValid++ifisValidV2(passport){numValidV2++}}// reset passportpassport=make(map[string]string,8)}else{parts:=strings.Split(line," ")for_,part:=rangeparts{attribute:=strings.Split(part,":")passport[attribute[0]]=attribute[1]}}}// last one is special snowflake, as file does not end with 2 newlinesifisValid(passport){numValid++ifisValidV2(passport){numValidV2++}}fmt.Println(numValid,numValidV2)}
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Go again, a bit hacky with the very last element