The Math behind the Mind Reading of fido
See the website: www.digicc.com/fido/
Here is my version: A little bit different, but the underlying Trick is the same.
Lets hack the Mind-Reading Trick
Again, it wont allow us to pick our numbers directly. Like poker game, after you deal the cards, the SWF will deal it again before real game-play.
There are several calculation steps, so it is not so convincing about the "Mind-Reading" thing. We smell something about Math.
Since it involve a more difficult calculation (a subtraction between two 3-digit numbers) , the possibility of "failure to guess" is higher. It fails if the user is not very competent in Calculation.
Anyway, lets hack the Trick, the underlying Math.
Before we go deep, we need to know a basic rule:
What is the module if we divide a 4 digit number 5438 by 9 ? The module is the same as (5+4+3+8) divided by 9. That is 20%9=2; So, to get the module, we just sum up the digits and divide it by 9. This is true not only for a number of 4 digits. It can be applied to numbers containing any digits.
Lets explain it by Math language: Take a 4- digit number in the form of "abcd", we see:
Because the anterior part is dividable by 9, the resulted module after divided by 9 is the same as (a+b+c+d)%9.
By this, we know several rules:
The module of 5438 is the same as 4835, because the module is the same as (5+4+3+8); It means that, the "sequence" of these 4 digits does not affect the resulted module divided by 9. So, stumbling of these 4 digits does not affect the module.
If we subtract 5438 by (5+4+3+8), we get the result of the anterior part in the formula I demonstrated. It means that, the result is a number dividable by 9;
The module of 5438 is (5+4+3+8), and the module of 4835 is also (5+4+3+8). So, if we subtract 5438 by 4835, the (5+4+3+8) is get subtracted off. The resulted number will be dividable by 9. That is , the module will be 0.
These rules are also correct for numbers containing more than 3 digits. But, we wont expect user do a correct calculation between 8 digit numbers.
Lets check the details:
Pick two 4- digit numbers, stumbling them to create two numbers and do subtraction between them. OK, the resulted number will be dividable by 9; -- the rule 3.
Hide one, and stumbling those digits to get a new number. OK, we know that "stumbling" wont affect the module of this number. It just tries to confuse us. -- the rule 1;
When we type out all the digits but the hidden one, it is easy to know what is the hidden digit, because the number (or sum of the digits) is dividable by 9. If we type in "12", we know the hidden number is 6; So that (1+2+6) will be dividable by 9; -- the rule 2.
Why the SWF does not allow us to hide a digit being '0' ? Is it really because the digit is already a "circle" so we can not make circle again ?
The reason is that, '0' and '9' have the same module. If we type "45", we dont know whether the hidden digit is '0' or '9'. If swf rules that '0' is not allowed, then the hidden digit must be '9';