53 lines
874 B
Go
53 lines
874 B
Go
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)
|
|
}
|