Puzzle...
One of my managers, who also happens to be a pretty smart guy, and I were having a discussion today. We were talking about various interesting subjects including Engineering subjects like Natural Language Processing (NLP) and AI. And he asked me, "How do we make a computer smart enough to be able to solve a puzzle?" Now the puzzle could be a mathematical puzzle, a logical puzzle or even a language puzzle. And just to give me an example he asked me a puzzle.
What is a 2 digit number, that, when multiplied with 9, gives a 3 digit number. Now the first digit of the 3 digit answer is the same as the first digit of the original 2 digit number and the last digit of the 3 digit answer is the same as the 2nd digit of the original 2 digit number and the 2nd digit of the 3 digit answer is 0.
so if XY * 9 = X0Y, what is X and Y?
Now the problems is quite simple and I could solve it in the time required by me to leave from my desk to my bike parked below. And that's like less than 2 minutes. The issue here is how did you approach this problem and how do you make a computer arrive to the best approach.
So this is a question to all readers. Please solve this problem and tell me how you solved it and what approach you took.
Comments
Anonymous
January 02, 2008
Solving a problem like this in prolog is fairly straight forward. The only real challenge is turning a two or three digit number into a series of symbols and back, and that isn't particularly difficult. A bigger challenge would be a program that would read the description you provided above and would write the prolog application that would solve the problem. Now, that's more interesting. (Of course, NLP is a strong suit for Prolog as well). Solving puzzles is not a very good Turing test. Determining the emotional context of a description of a character in a short story, and being able to answer questions about alternative choices that the character could have made... now that would be a much better test of artificial intelligence.Anonymous
January 02, 2008
Not being a uber math type I had a guess. I started with 12, knowing it would yeild a 3 digit number, then went to 19, at twenty the first digit is different to the yielded result. Then realising I'd read the question wrong started again. But this gave me a rough idea of what I was dealing with, kinda set up my brain for math really. Odd but true. Figure out the "units" value that gives 9*Y=(n)Y knowing the 9 times table told me that any number ending in 5 will satisfy this, then I just tried each one of the tens + 5 15,25,35, 45 Knowing that I was only dealing with a possible 9 combinations after the initial calculation led me to brute force it rather than brute force my way through 89 of them. Unless I read the qestion wrong again of course. Hence the anon.Anonymous
January 03, 2008
The answer is x = 4 and y = 5. xy9 = x0y [using same notation as problem statement] xy(10 - 1) = x0y xy0 - xy = x0y This implies 0 - y mod 10 = y; or 2y = 0 or y = 5 [using last digit of x0y] This also implies that y - 1 - x = 0 mod 10 [using the 0 in x0y] i.e 4 - x = 0 mod 10 or x = 4 The approach I would suggest is translating the puzzle from natural language to a satisfiability problem and use a SAT solver.Anonymous
January 03, 2008
// mi // * // 9 // ---- // m0i // then... // i * 9 = zi // m * 9 = (m-1)(10-z) int i; for (i = 1; i < 9; i++) if (((i * 9) - i) % 10 == 0) break; int z = i * 9 / 10; int tenMinasZ = 10 - z; int firstDigit,secondDigit; int m; for (m = 1; m < 9; m++) { firstDigit = (m * 9) % 10; secondDigit = (m * 9) / 10; if ((firstDigit == tenMinasZ) && (secondDigit == m-1)) break; } int number = i + (m * 10); Console.WriteLine("The Number is : " + number + "n" + "Multiply by 9 Result is: " + number * 9);Anonymous
January 03, 2008
Well, it's easy to see that 9XY=X0Y can be represented as 90X + 9Y = X0Y. From that, there are only two cases where 9Y has Y as the second digit, Y=0 and Y=5 For the Y=0 case, 90X = X00 does not have an integer solution. For the Y= 5 case, 90X + 45 = X05, so 90X = (X-1)60, leaving X=4 So, XY = 45 and 9*45 = 405Anonymous
January 05, 2008
I solved it by breaking the problem apart in 2 different pieces:
- Y * 9 = ?Y -> there's only 1 candidate: 5 and 5 * 9 = 45
- X * 9 = ?6 -> there's only 1 candidate: 4 Took about 30 secs. 20 to figure out the approach and 10 to actually calculate.