aoc2016/archive/day05/day.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)
}