aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--day4.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/day4.go b/day4.go
new file mode 100644
index 0000000..ebf8810
--- /dev/null
+++ b/day4.go
@@ -0,0 +1,38 @@
+package main
+
+import (
+ "bytes"
+ "crypto/md5"
+ "fmt"
+ "strconv"
+)
+
+func hash(secret []byte, x int64) [16]byte {
+ str := strconv.AppendInt(secret, x, 10)
+ return md5.Sum(str)
+}
+
+func check(hash [16]byte, target []byte, length int) bool {
+ str := []byte(fmt.Sprintf("%x", hash))
+ return bytes.Equal(str[:length], target[:length])
+}
+
+func main() {
+ secret := []byte("iwrupvqb")
+ target := []byte("000000")
+ x := int64(1)
+ got5, got6 := false, false
+
+ for !(got5 && got6) {
+ h := hash(secret, x)
+ if !got5 && check(h, target, 5) {
+ fmt.Println("Lowest number for 5-zeroes hash:", x)
+ got5 = true
+ }
+ if !got6 && check(h, target, 6) {
+ fmt.Println("Lowest number for 6-zeroes hash:", x)
+ got6 = true
+ }
+ x += 1
+ }
+}