IQ / Programming Quiz (Cannon-Ball Stacks)
-
How do 3 cannonballs make a tetrahedral pyramid? :P
Life is like a s**t sandwich; the more bread you have, the less s**t you eat.
I didn't say 3 I said 4 :P
-
I didn't say 3 I said 4 :P
... but the source has to be two tetrahedral pyramids ...
Life is like a s**t sandwich; the more bread you have, the less s**t you eat.
-
... but the source has to be two tetrahedral pyramids ...
Life is like a s**t sandwich; the more bread you have, the less s**t you eat.
but not all of them: The smallest number of cannon-balls he can have if the two pyramids are the same size is twenty (assuming he uses every cannon-ball in both pyramids). That's an assumption, not a requirement :)
-
but not all of them: The smallest number of cannon-balls he can have if the two pyramids are the same size is twenty (assuming he uses every cannon-ball in both pyramids). That's an assumption, not a requirement :)
Using that logic I think that your answer might be one :cool:
Life is like a s**t sandwich; the more bread you have, the less s**t you eat.
-
Using that logic I think that your answer might be one :cool:
Life is like a s**t sandwich; the more bread you have, the less s**t you eat.
Otherwise you would have to form two different sized pyramids who could form one larger pyramid without any left overs. That would require a Calculus 1 concept called optimization, which isn't too mard but more work than I want to do.
-
Wow such complicated answers.... the answer is 4. The question is If the two smaller pyramids are different sizes, however, what would be the minimum number of cannon-balls he could use to make one large tetrahedral pyramid? ... but the thing is, there are still only 20 cannonballs to use to build the pyramid and he never said you had to use all the cannonballs. It asks the MINIMUM... which is 3 on the bottom + 1 on top.
You missed this bit from the problem: "assuming he uses every cannon-ball in both pyramids". But nice try. :)
-
Maybe not the most elegant solution but might possibly be the fastest way to come up with the answer!: 1 Using Excel I created 3 columns: column 1 being a linear sequence (1,2,3 ....100); column 2 representing each layer (B1=1,B2=A1+A2); the third representing the pyramid (C1=1,C2=B1+B2) 2 I pasted these into an Access table 3 I cross joined the table to itself and added the two columns 3 4 I inner joined the query to the table on sum = column 3 Answer 120 (8 layers) + 560 (14 layers) = 680 (15 layers)
Life is like a s**t sandwich; the more bread you have, the less s**t you eat.
PhilLenoir wrote:
Using Excel I created 3 columns: column 1 being a linear sequence (1,2,3 ....100); column 2 representing each layer (B1=1,B2=A1+A2); the third representing the pyramid (C1=1,C2=B1+B2)
That's how I started out on paper, then converted that to C#.
PhilLenoir wrote:
I inner joined the query to the table on sum = column 3
I hadn't considered using a database. Points for innovation. :thumbsup:
PhilLenoir wrote:
680
That's the answer I got. :)
-
Even bruter force:
def T(n):
return n * (n + 1) * (n + 2) / 6for r in range (1, 1000):
for q in range(1, r):
for p in range(1, q):
if T(p) + T(q) == T(r):
print T(p), '+', T(q), '=', T(r)Yields:
120 + 560 = 680
1540 + 27720 = 29260
4960 + 29260 = 34220
10660 + 59640 = 70300
39711 + 182104 = 221815
102340 + 125580 = 227920
7140 + 280840 = 287980
19600 + 447580 = 467180
...Points for compact code. :thumbsup:
-
Haskell answer:
layers = scanl1 (+) [1..]
sizes = scanl1 (+) layers
combinedSizes = [(s1, s2, s1 + s2) | s1 <- sizes, s2 <- takeWhile (< s1) sizes]
newPyramids = filter combinesToPyramid combinedSizes
where combinesToPyramid (s1, s2, sum) = sum `elem` (takeWhile (sum >=) sizes)answer = head newPyramids
-------- SPOILER ------------ this gives the answer as "(560, 120, 680)", (if you load it up in GHCI and type "answer"). If you want the n first solutions, just type "take n newPyramids":
take 3 newPyramids
[(560,120,680),(27720,1540,29260),(29260,4960,34220)]I don't know Haskell, but that looks pretty elegant. Points awarded. :)
-
You missed this bit from the problem: "assuming he uses every cannon-ball in both pyramids". But nice try. :)
That's an assumption though, not a requirement. A requirement would be worded something like: (as he must use every cannonball from both pyramids) The fact that the problem states exactly how many cannon balls there are should tell you something. With 20 cannonballs the best you could do with 2 pyramids is a 3+1 pyramid and a 6+3+1 pyramid with 6 left over. The question asks if the pyramids are not the same size, what would be the minimum. This doesn't magically give you permission to *add* more cannonballs to the equation :P So if it *is* a poorly worded requirement then the answer is 20. Otherwise, it's 4.
-
- looked up the tetrahedral numbers in Wikipedia and found this list: 1, 4, 10, 20, 35, 56, 84, 120, 165, 220, 286, 364, 455, 560, 680, 816, 969... (10 seconds of work) 2) opened an Excel sheet and created the table of sums 2 5 11 21 36 57... 5 8 14 24 39 60... 11 14 20 30 45 66... 21 24 30 40 55 76... 36 39 45 55 70 91... ... (just needed to recall the appropriate syntax to form the cell expression; 1 minute of work) 3) sorted all sums in increasing order 2, 5, 5, 8, 11, 11, 14, 14, 20, 21, 21, 24, 24, 30, 30, 36, 36, 39, 39, 40, 45, 45, 55, 55, 57, 57, 60, 60, 66, 66, 70, 76, 76, 85, 85, 88, 88, 91, 91, ... (moved to Word to flatten the table structure; 1 minute of work) 4) spotted by eye in the list the first tetrahedral number larger than 20: 680, the sum of 120 and 560. (Lucky the Wikipedia list was long enough :)) (2 extra minutes) 5) explained the answer in CodeProject (half an hour)
Points awarded for getting as close as possible to cheating without fully qualifying as cheating. ;P
-
I did this using an old technique: pencil and paper. It is more complicated to explain than it was to do. Basically, I wrote 3 columns of numbers: Col 1: 1, 2, 3, 4, etc [represents the no of levels in the pyramid) Col 2: 1, (corresponding no in col 1 + prev number in col 2), ... [represents the no of new balls in the new level of the pyramid] Col 3: 1, (corresponding no in col 2 + prev number in col 3), ... [represents the total no of balls in the pyramid] and then looked for a number in col 2 that was the same as a number in col 3 which is a pyramid's worth of balls that is also a level's worth of balls [Actually, I didn't bother with col 1 - I could work that one out without writing it down, but it is easier to explain with it there] My solution is ... The first one found was 120, so the solution is 120 + 560 (no in col 3 before the 120 in col 2) = 680 (no in col 3 next to 120 in col 2). (select the text in the gap above, e.g. by dragging the mouse, to read it) Of course, this discounts the possibility that a pyramid might split across multiple levels in a combined pyramid. Just in case I had made a simple arithmetic error, I checked in MS-Excel: Cell A1 = 1, B1 = 1, C1 = 1 Cell A2 = =A1+1, B2 = =A2+B1, C2 = =B2+C1 Cells A3 through C17 = Copy and paste A2 through C2 [I've had to edit this entry twice - suffering from lysdexia (!) today].
Good call on confirming you didn't make an error. I started out on paper and indeed made an error, which I happened to spot when I made the C# program.
-
I did this using an old technique: pencil and paper. It is more complicated to explain than it was to do. Basically, I wrote 3 columns of numbers: Col 1: 1, 2, 3, 4, etc [represents the no of levels in the pyramid) Col 2: 1, (corresponding no in col 1 + prev number in col 2), ... [represents the no of new balls in the new level of the pyramid] Col 3: 1, (corresponding no in col 2 + prev number in col 3), ... [represents the total no of balls in the pyramid] and then looked for a number in col 2 that was the same as a number in col 3 which is a pyramid's worth of balls that is also a level's worth of balls [Actually, I didn't bother with col 1 - I could work that one out without writing it down, but it is easier to explain with it there] My solution is ... The first one found was 120, so the solution is 120 + 560 (no in col 3 before the 120 in col 2) = 680 (no in col 3 next to 120 in col 2). (select the text in the gap above, e.g. by dragging the mouse, to read it) Of course, this discounts the possibility that a pyramid might split across multiple levels in a combined pyramid. Just in case I had made a simple arithmetic error, I checked in MS-Excel: Cell A1 = 1, B1 = 1, C1 = 1 Cell A2 = =A1+1, B2 = =A2+B1, C2 = =B2+C1 Cells A3 through C17 = Copy and paste A2 through C2 [I've had to edit this entry twice - suffering from lysdexia (!) today].
jsc42 wrote:
lysdexia
:laugh: I thought I was the only one who used that word. Actually, I saw it on some nature show when I was younger and have been using it ever since. :thumbsup:
-
That's an assumption though, not a requirement. A requirement would be worded something like: (as he must use every cannonball from both pyramids) The fact that the problem states exactly how many cannon balls there are should tell you something. With 20 cannonballs the best you could do with 2 pyramids is a 3+1 pyramid and a 6+3+1 pyramid with 6 left over. The question asks if the pyramids are not the same size, what would be the minimum. This doesn't magically give you permission to *add* more cannonballs to the equation :P So if it *is* a poorly worded requirement then the answer is 20. Otherwise, it's 4.
Stephen Dycus wrote:
the answer is 20. Otherwise, it's 4
Nope and nope. :)
Rafiki said:
Look harder.
-
Stephen Dycus wrote:
the answer is 20. Otherwise, it's 4
Nope and nope. :)
Rafiki said:
Look harder.
"I will post tomorrow how I arrived at my solution (which may be incorrect, as the book doesn't list what the correct answer is)" You can't say "nope" when you don't even know if you are correct XD
-
"I will post tomorrow how I arrived at my solution (which may be incorrect, as the book doesn't list what the correct answer is)" You can't say "nope" when you don't even know if you are correct XD
My not know if I'm correct does not preclude my knowing you are incorrect. :)
-
Background
I'm reading "The Mammoth Book of IQ Puzzles". It contains, as you may have guessed, a bunch of IQ puzzles. I just solved one of them and thought I'd write the problem down here so you would all have a chance to solve it too. It is called "Cannon-Ball Stacks". In finding the answer, reference materials, books, calculators, and computers are allowed. Since computers are allowed, programs can be created to get the solution.
Cannon-Ball Stacks
A park ranger has stacked cannon-balls in two tetrahedral pyramids for display at Gettysburg. He later decides to combine the cannon-balls in both of the pyramids in order to create one large pyramid. The smallest number of cannon-balls he can have if the two pyramids are the same size is twenty (assuming he uses every cannon-ball in both pyramids).
[10 cannon-ball pyramid] + [10 cannon-ball pyramid] = [20 cannon-ball pyramid]
If the two smaller pyramids are different sizes, however, what would be the minimum number of cannon-balls he could use to make one large tetrahedral pyramid? Difficulty: 4 out of 5.
AspDotNetDev's Extra Rules
Explain how you arrived at the solution. If you create a program to help you solve the problem, paste that in your message. I will reply to this message with the answer in a hidden <span> tag. Don't cheat by looking first though! I will post tomorrow how I arrived at my solution (which may be incorrect, as the book doesn't list what the correct answer is). Points will be awarded for: elegance, quickness, humor, and correcting others (in no particular order). Good luck!
Not-so-brute brute-force: This version is based on a simple test for tetrahedrality: if
N = n.(n+1).(n+2)
,n
is the integer cube root ofN
, so thatN
givesn
gives back the sameN
. (As one can check,n^3 <= N < (n+1)^3
so thatn <= N^1/3 < n+1
.) Now all tetrahedral number pairs are tried and their sum tested for tetrahedrality.def T(n):
return n * (n + 1) * (n + 2)def IsT(N):
return N == T(int(pow(N, 1. / 3.)))for q in range(1, 1000):
for p in range(1, q):
if IsT(T(p) + T(q)):
print T(p) / 6, '+', T(q) / 6, '=', (T(p) + T(q)) / 6 -
My not know if I'm correct does not preclude my knowing you are incorrect. :)
Yes it does, if you are incorrect then you do not know the correct answer. With 20 cannonballs there are only 3 possible answers: 3+1 = 4 aka MIN 6+3+1 = 10 10+6+3+1 = 20 aka MAX Since my solution IS a tetrahedral pyramid you cannot deduce that my answer is incorrect without knowing the correct answer.
-
Points awarded for getting as close as possible to cheating without fully qualifying as cheating. ;P
;)
-
Points for compact code. :thumbsup:
Thanks. I just released a more efficient compact one.