Towers of Hanoi: Difference between revisions
Content added Content deleted
m (J: signum not needed with if.) |
(provide verbose approach) |
||
Line 491: | Line 491: | ||
=={{header|J}}== |
=={{header|J}}== |
||
<lang j>H =: i.@ |
<lang j>H =: i.@,&2 ` (({&0 2 1,0 2,{&1 0 2)@$:@<:) @. * |
||
H1=: monad define |
H1=: monad define |
||
Line 510: | Line 510: | ||
2 0</lang> |
2 0</lang> |
||
The result is a 2-column table; a row <tt>i,j</tt> is interpreted as: move a disk (the top disk) from peg <tt>i</tt> to peg<tt> j</tt> . |
The result is a 2-column table; a row <tt>i,j</tt> is interpreted as: move a disk (the top disk) from peg <tt>i</tt> to peg<tt> j</tt> . |
||
Or, if a textual display is desired, similar to some of the other solutions here: |
|||
<lang J>hanoi=:monad define |
|||
moves=. i.@,&2 ` (({&0 2 1,0 2,{&1 0 2)@$:@<:) @. * y |
|||
disks=. $~` ((],[,]) $:@<:) @.* y |
|||
('move disk ';' from peg ';' to peg ');@,."1 ":&.>disks,.1+moves |
|||
)</lang> |
|||
For example: |
|||
<lang J> hanoi 3 |
|||
move disk 1 from peg 1 to peg 3 |
|||
move disk 2 from peg 1 to peg 2 |
|||
move disk 1 from peg 3 to peg 2 |
|||
move disk 3 from peg 1 to peg 3 |
|||
move disk 1 from peg 2 to peg 1 |
|||
move disk 2 from peg 2 to peg 3 |
|||
move disk 1 from peg 1 to peg 3</lang> |
|||
=={{header|Java}}== |
=={{header|Java}}== |