Number puzzle
Here's a little number puzzle quiz.
Fill in the digits:
ABC
+DEF
GHI
Where each letter represents a unique digit between 1 and 9, such that all digits are used exactly once.
OR (and this is where it gets interesting...) prove that it's impossible to fill in such digits. (And, "it's too hard" is not a proof that it's impossible)
I came up with this morning while teaching my 2 year old daughter her digits 1 through 9. (No, she didn't solve it). I was writing the digits 1,2,3,4,5,6,7,8,9 in a 3x3 matrix for her and thought it would be cute if the first row plus the second row added to the third row.
I'll leave comments moderated here to prevent folks from giving away the answer. [Update:] I'm getting lots of great responses here and I'm itching to unmoderate the comments. soon... [Update:] I've published the comments and written a followup post.
Comments
- Anonymous
June 12, 2007
1 8 7 4 5 2
6 3 9 Mostly by trial and error ;)
- Anonymous
June 12, 2007
That problem is impossible with the numbers 1 though 9 because that set includes 5 odd numbers and 4 even numbers. The only possible combinations are: E E O E O O
- OR - OR - (Where O is odd and E is even) E O E Since ALL the numbers must be used and only once, there is no solution that could exist with using exactly 5 odd numbers.
Anonymous
June 12, 2007
Well...this just cries out for a little program. In Haskell: perms [] = [[]] perms xs = [ x : ps | x <- xs , ps <- perms ( xs[x]) ] get3 :: String -> (Int, Int, Int) get3 s = (read a :: Int, read b :: Int, read c :: Int) where a = take 3 s b = take 3 (drop 3 s) c = take 3 (drop 6 s) get3 :: String -> Bool isSum s = a+b == c where (a,b,c) = get3 s uniqueSums :: String -> [String] uniqueSums = filter isSum (perms "123456789") Evaluate 'uniqueSums "123456789"' to get the list of solution strings. There's loads of solutions (336, to be precise). Just to make sure I haven't got the wrong end of the stick, here's an example: "546273819" => 546 + 273 = 819 Uses each digit once, the third triple is the sum of the first two?Anonymous
June 12, 2007
- A+D = G
- B+E = H
- C+F = I A+D+G+B+E+H+C+F+I = 1+2+3+...+9 = 45 Applying 1,2,3) 2G+2H+2I = 45 G+H+I = 45/2 = 22.5 This cannot be because G,H,I are integers, therefore its sum have to be an integer.
Anonymous
June 12, 2007
129 438 567Anonymous
June 12, 2007
Simple enough. A generator for all solutions: def n(a, b, c): #turn 1,2,3 into 123 return (100a) + (10b) + c def is_solution(perm): if n(*perm[:3]) + n(*perm[3:6]) == n(*perm[6:]): return True return False #requires probstat http://probstat.sourceforge.net/ from probstat import Permutation for perm in Permutation(range(1,10)): if is_solution(perm): print n(*perm[:3]), n(*perm[3:6]), n(*perm[6:])Anonymous
June 12, 2007
hmmm.... 336 solutions. Did you do it by hand?Anonymous
June 12, 2007
254 637 891Anonymous
June 12, 2007
so what IS the answer? I couldnt solve it!Anonymous
June 12, 2007
Let x = A+B+C+D+E+F and y = G+H+I Note that x + y = 1+2+3+4+5+6+7+8+9 = 45 Hence x + y = 45 and y = 45 - x If there is no overflow then x = y, so x = 45 - x => x = 22.5 => impossible If there is one overflow then x - 10 + 1 = y (10 lost on one digit, 1 gained on other digit), that is x = y + 9 Therefore x = y + 9 = 45 - x + 9 = 54 - x => 2x = 54 => x = 27 => eventually possible If there are two overflows then by same argument x = y + 2*9 => ... => impossible Hence there is exactly one overflow Now note that we can without loss of generality assume that: A < D B < E C < F A + D < 10 B + E < 10 C + F > 10 (overflows) Hence if we have one solution, we can produce 16 other by swapping pars A-D, B-E, C-F and by moving the first column to the back - that is: BCA EFD HIG Also observe that under these constraints: G = A + D H = B + E + 1 I = C + F - 10 Now, consider possible triplets (C,F,I): (under the constraint C < F and C + F > 10) 2 9 1; 3 9 2; 3 8 1 4 9 3; 4 8 2; 4 7 1 5 9 4; 5 8 3; 5 7 2; 5 6 1 6 9 5; 6 8 4; 6 7 3 7 9 6; 7 8 5 8 9 7; Consider triplet (2,9,1): Numbers 1,2,9 are taken so 3,4,5,6,7,8 is left for A,D,G, B,E,H which are related by G = A + D H = B + E + 1 Thus G + H = A + B + D + E + 1 left hand side <= 7 + 8 left hand side <= 15 right hand side >= 3 + 4 + 5 + 6 + 1 right hand side >= 19 so there can not be equality and there can not be solution for triple (2,9,1) Similarly we eliminate triples (3,9,2) and (3,8,1). Other tripes have a solution. For example consider (4,9,3): Numbers 4,9,3 are taken. Numbers 1,2,5,6,7,8 are left. G = A + D H = B + E + 1 7 = 1 + 6 8 = 2 + 5 + 1 (or 7 = 2 + 5 8 = 1 + 6 + 1 ) So this yields solutions: 124 659 783 and 214 569 783 In conclusion, we have 13 possible triplets for (C,F,I), each should yields at least one solution and each solution can be permutated 16 times. Thus, we have at least 208 solutions. Whoever approached this by brute force, let me know the exact number. David PS: This is what you get for asking a nice math question just after the exams. :-) PPS: In other news, over the summer I will be working on MonoDevelop debugger as we as SharpDevelop debugger. (Part of GsoC) How cool is that :-)Anonymous
June 12, 2007
I'm too lazy for math analysis, so this small code will generate all results (1728 - I hope those are all and only all...): for (int x = 0; x < 1000; x++) { for (int y = 0; y < 1000; y++) { // sum numbers int z = x + y; string v = String.Format("{0:000}{1:000}{2:000}", x, y, z); // check if each digit is different if (v.Length != 9) { continue; } bool[] vFound = new bool[10]; bool found = true; foreach (char vChar in v) { int num = Convert.ToInt32(vChar) - 48; if (vFound[num]) { found = false; break; } vFound[num] = true; } if (found) { Console.WriteLine(v); } } }
[Mike: this includes the 0 digit (only 1...9 allowed), which is why you're probably getting 1728 instead of only 36. ]Anonymous
June 12, 2007
int totalCount = 0; for( int i = 111; i < 999; i++ ) { for( int j = 111; j < 999; j++ ) { int m = i + j; if( m > 999 || m<111 ) continue; char[] allDigitsArray = string.Concat(i,j,m).ToCharArray(); Array.Sort(allDigitsArray); string requiredDigits = "123456789"; string allDigits = new string(allDigitsArray); if( requiredDigits==allDigits ) { totalCount++; Console.WriteLine(i + " + " + j + " = " + m); } } } Console.WriteLine("Total " + totalCount + " found."); Total 336 found.Anonymous
June 12, 2007
317 628
945
- Anonymous
June 13, 2007
Is this what you meant? 127 +368
495 This took me about 60 seconds.
- Anonymous
June 13, 2007
Here are answers + commentary to the number puzzle I posted yesterday, which was, fill in the digits: