1
0
www.mikescher.com/www/statics/euler/Euler_Problem-079_explanation.md

21 lines
1.5 KiB
Markdown
Raw Normal View History

2017-11-08 17:39:50 +01:00
This is one of the problems i really enjoyed solving.
We make the assumption that our final pass code has no duplicate digits (If we hadn't found a solution we would need to change that part).
This is a pretty good assumption because no attempt has a duplicate digit in it.
> *Side note:* This leaves us with a 8-digit code, because only 8 digits are used (`4` and `5` are missing).
First we generate a 10x10 grid where we remember the absolute ordering of the numbers from our attempts (eg `3` is before `8` or `9` is after `2`).
If we inspect this data we can see that every field (for numbers in our pass code) is set, the fifty login attempts generate more than enough data for this.
> *Side note:* In fact there are only 33 **unique** login attempts
Then we can simply sort an array of the valid digits with this ordering. And - frankly - I find this is a really neat way of doing this.
Because we sort only eight numbers, sorting-performance is not a big factor.
So I searched for the simplest (easiest to implement) sorting algorithm I could find.
This was surprisingly not Bubble-sort, but [Gnome Sort](https://en.wikipedia.org/wiki/Gnome_sort) (accordingly to the author "the simplest sort algorithm").
Which was pretty easy to implement in Befunge (and for 8 values is the runtime of O(n^2) not *that* bad).
A last thing: For a problem where I used an two-dimensional cache **and** that has input data I was surprised to fit everything in the Befunge-93 80x25 size restrictions.