[Haskell-beginners] tower hanoi problem

Dudley Brooks dbrooks at runforyourlife.org
Mon Feb 16 23:55:23 UTC 2015


(I hope that no one will think that this is too much of a hint.)

There are three restrictions on how you can move:

(1)  You can only move one disc at a time.

(2)  You can only move the top disc of a stack.

(3)  You can't put a larger disc on a smaller one.

What if (1) weren't true?  What if you could move a whole bunch of discs 
at the same time?  (Which would kind of mean that (2) wasn't true 
either.)  What if, after you had removed a certain number of discs (I 
won't say how many, but think small!) from the top of a stack, you could 
simply pick up the entire remaining stack and move it?

On 2/16/15 10:45 AM, Roelof Wobben wrote:
> And Im still confused.
>
> Roelof
>
>
>
> Dudley Brooks schreef op 16-2-2015 om 19:41:
>> Plus I should say that the "first" (or whichever) step might also 
>> really be more than one step. The crucial idea is that there are 
>> individual step(s) versus "lumped" step(s), where the individual 
>> step(s) are the base case(s) and the "lumped" step(s) are the 
>> recursive invocation(s).
>>
>> On 2/16/15 10:31 AM, Dudley Brooks wrote:
>>> You're right, of course.  I guess the more precise way to say what I 
>>> meant is that you *separate* a single step from everything else, 
>>> dealing with everything else as a lump ... or two lumps ... or three 
>>> lumps ... or ...
>>>
>>> I did at least say that "a 'single step' might have more than one 
>>> step."  ;^)  My mistake was the use of the word "first".
>>>
>>> On 2/16/15 5:07 AM, Joel Neely wrote:
>>>> I'm sorry, but I must disagree with the generalization.
>>>>
>>>> You described "the very nature" of a typical recursion over a list:
>>>> (1) deal with the head, then
>>>> (2) deal with everything else.
>>>>
>>>> But lists are not the only recursive structure. Infix-order 
>>>> processing of a tree, for example, is more naturally described as:
>>>> (1) deal with the left sub-tree (the first "everything else"),
>>>> (2) deal with the parent (analogous to the head of a list),
>>>> (3) deal with the right sub-tree (the second "everything else").
>>>>
>>>> At the risk of a spoiler...
>>>>
>>>> .
>>>>
>>>> .
>>>>
>>>> .
>>>>
>>>> .
>>>>
>>>> One approach to the Towers of Hanoi problem emerges nicely from 
>>>> thinking of the moves as a tree.
>>>>
>>>> -jn-
>>>>
>>>> On Sun, Feb 15, 2015 at 2:54 PM, Dudley Brooks 
>>>> <dbrooks at runforyourlife.org <mailto:dbrooks at runforyourlife.org>> wrote:
>>>>
>>>>     In my opinion, advising Mr Wobben to watch the pattern of moves
>>>>     will *not* lead him to the recursive solution, since the
>>>>     pattern of moves is really iterative.
>>>>
>>>>     My hint would be to remember the very nature of recursion
>>>>     itself (for *any* problem):  Do the first step.  Then (to put
>>>>     it very dramatically) do *everything else* in *a single step*! 
>>>>     (Realizing that "everything else" is really the same problem,
>>>>     just made slightly smaller.)
>>>>
>>>>     Note:  "A single step" might itself have more than one step. 
>>>>     My point is that recursion consists of (to put it humorously): 
>>>>     To do ABCDEFGHIJKLMNOPQRSTUVWXYZ, first you do A, then you do
>>>>     BCDEFGHIJKLMNOPQRSTUVWXYZ.  And, of course, "first" might
>>>>     actually be "last"!  And remembering the story of the Gordian
>>>>     Knot might help too.  (I apologize that trying not to be too
>>>>     explicit in the hint possibly makes it even more obscure.)
>>>>
>>>>     Here's another hint that's useful for all kinds of programming
>>>>     problems, not just recursion:  Most problems consist of not
>>>>     only what you're trying to solve, but also what the
>>>>     restrictions are on what you're allowed to do to solve it. 
>>>>     Often some good insights come from imagining how you could
>>>>     solve the problem if you could ignore one or more of the
>>>>     restrictions (that's what I meant by the Gordian Knot
>>>>     reference).  So for the Towers of Hanoi, think about what the
>>>>     restrictions are on what kind of moves you're allowed to make. 
>>>>     Remove one of those restrictions.
>>>>
>>>>     (Speaking of the iterative solution, the fun thing about
>>>>     actually physically doing the Towers of Hanoi is that, even
>>>>     though you're doing it by remembering the steps of the
>>>>     iterative pattern, as you watch the towers grow and shrink you
>>>>     can kind of "see" the recursion.)
>>>>
>>>>
>>>>     On 2/15/15 12:51 AM, Roelof Wobben wrote:
>>>>
>>>>         YCH schreef op 15-2-2015 om 9:45:
>>>>
>>>>             How about if I say "Actually target was c not b and
>>>>             here is one more
>>>>             disc. I put it on a. Now you should move all to c"
>>>>
>>>>
>>>>
>>>>         Hanoi 1 a b c
>>>>
>>>>         A -> C
>>>>
>>>>         Hanoi 2 a b c
>>>>
>>>>         A -> B
>>>>         A -> C
>>>>         B -> C
>>>>
>>>>         Hanoi 3 a b c
>>>>
>>>>         A -> C
>>>>         A -> B
>>>>         C -> B
>>>>         A -> C
>>>>         B -> A
>>>>         B -> C
>>>>         A -> C
>>>>
>>>>
>>>>         Roelof
>>>>
>>>>
>>>>         _______________________________________________
>>>>         Beginners mailing list
>>>>         Beginners at haskell.org <mailto:Beginners at haskell.org>
>>>>         http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>>
>>>>
>>>>     _______________________________________________
>>>>     Beginners mailing list
>>>>     Beginners at haskell.org <mailto:Beginners at haskell.org>
>>>>     http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> Beauty of style and harmony and grace and good rhythm depend on 
>>>> simplicity. - Plato
>>>
>>
>>
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150216/4e9d5694/attachment.html>


More information about the Beginners mailing list