package day05 import ( "crypto/md5" "fmt" "strconv" "tools" ) func Part1(puzzle tools.AoCPuzzle) interface{} { doorId := puzzle.GetInputArray()[0] password := "" i := 0 for { chk := doorId + strconv.Itoa(i) chksum := fmt.Sprintf("%x", md5.Sum([]byte(chk))) if chksum[0:5] == "00000" { password += string(chksum[5]) } if len(password) == 8 { break } i++ } return password } func Part2(puzzle tools.AoCPuzzle) interface{} { doorId := puzzle.GetInputArray()[0] password := make([]byte, 8) i := 0 cCount := 0 for { chk := doorId + strconv.Itoa(i) chksum := fmt.Sprintf("%x", md5.Sum([]byte(chk))) if chksum[0:5] == "00000" { if chksum[5] >= '0' && chksum[5] <= '7' && password[chksum[5]-48] == 0 { password[chksum[5]-48] = chksum[6] cCount++ } } if cCount == 8 { break } i++ } return string(password) }