PS: converting the result of MD5 hashMessage: to hex is a total waste of time. Just ask: - is the first byte zero? - is the second byte zero? - is the third byte less than 16? On Thu, 13 Dec 2018 at 00:07, Richard O'Keefe <raoknz@gmail.com> wrote:
This is the puzzle where you have to find the smallest integer such that '<some salt>' , (that integer) printString has an MD5 hash beginning with 5 hexadecimal zeros?
Brute force is just fine. Calling libnettle's MD5 functions from a C program, it found the right answer in under 0.2 seconds on a cheap laptop. If using the MD5 class in Pharo doesn't take a reasonable time, you may find that (MD5 isPluginAvailable) is false. On my cheap laptop, the obvious code took 30 seconds to find the right answer, which surely means that the plugin is *not* available. But there is absolutely no point in looking for anything faster.
So, (0 to: 1000000) findFirst: [:n | |digest| digest := MD5 hashMessage: 'YOUR SALT GOES HERE' , n printString. ... bytes begins with 00000 ...]
Linear search. Compute string. Compute its MD5 hash. Check the result.
The only time-consuming thing was browsing the MD5 class (and its superclass HashFunction) to figure out the interface.
Now it *could* have turned out to be too slow to be useful, in which case another strategy would have been needed. But it didn't. (I started with a rather smaller bound to get an idea of how fast it was, and it was fast enough.)
On Mon, 10 Dec 2018 at 00:30, Roelof Wobben <r.wobben@home.nl> wrote:
Helllo,
a question about day4 of 2015 is it right that I can only solve this bruteforece so begin at for example 1 , encode it, check for 5 zeros if found then I have found it otherwise increase the counter and do it again https://adventofcode.com/2015/day/4
Regards,
Roelof