library(tidyverse)
library(digest)
input <- "bgvyzdsv"Day 4: The Ideal Stocking Stuffer
# example 1
digest(str_c("abcdef", 609043), algo = "md5", serialize = FALSE)
## [1] "000001dbbfa3a5c83a2d506429c7b00e"
# example 2
digest(str_c("pqrstuv", 1048970), algo = "md5", serialize = FALSE)
## [1] "000006136ef2ff3b291c85725f17325c"
Note
I learned how to evaluate MD5 hash in R using the digest package from here.
Part One
n <- 1040000 # Empirically sufficient to find the answers (also for part 2)
md5_hashes <- tibble(
number = 1:n,
string = str_c(input, number),
hash = map_chr(string, \(x) digest(x, algo = "md5", serialize = FALSE))
)
lowest_number_5zeros <- md5_hashes |>
filter(str_starts(hash, "00000")) |>
slice(1) |>
pull(number)
cat("Lowest number with 5 leading zeros:", lowest_number_5zeros, "\n")
## Lowest number with 5 leading zeros: 254575Part Two
lowest_number_6zeros <- md5_hashes |>
filter(str_starts(hash, "000000")) |>
slice(1) |>
pull(number)
cat("Lowest number with 6 leading zeros:", lowest_number_6zeros, "\n")
## Lowest number with 6 leading zeros: 1038736