Comment on

 Need Help??

As always there are non recursive solutions. This one is 14 lines long if you exclude the animation code.

```#!/usr/bin/perl -w

print "Number of disks? ";
chomp( my \$numdisks = <STDIN> );
print "Sleep? ";
chomp( my \$sleep = <STDIN> );

\$numdisks ||= 8;
\$sleep    ||= 0.1;

my \$board = [ [], [], [], [] ];
push @{\$board->[1]}, \$_ for reverse 1 .. \$numdisks;
my %tower = map{ my \$str =' 'x(\$numdisks-\$_).'o'x\$_;
\$str = \$str.(\$_?'+':'|').reverse(\$str);
\$_, " \$str " } 0..\$numdisks;

hanoi( \$numdisks );

sub hanoi {
my \$n   = shift;
my \$n1  = \$n+1;
my @D   = (1)x\$n1;
my @s   = 1..\$n1+1;
my \$dir = 1 & \$n;
for(;;) {
my \$i = \$s[0];
do{ show(\$n,0,0,1); last } if \$i>\$n;
my \$to =(\$D[\$i]+(\$i&1?\$dir:1-\$dir))%3+1;
show( \$i, \$D[\$i], \$to );
\$D[\$i]   = \$to;
\$s[0]    = 1;
\$s[\$i-1] = \$s[\$i];
\$s[\$i]   = \$i+1;
}
}

sub show {
my ( \$num, \$from, \$to, \$show_final ) = @_;
\$^O =~ m/Win32/ ? system("cls") : system("clear");
for my \$i( reverse 0..\$numdisks ) {
print "\n", map{\$tower{ \$board->[\$_]->[\$i] || 0} }1..3;
}
return if \$show_final;
push @{\$board->[\$to]}, pop @{\$board->[\$from]};
print "\n\nMove disk \$num from \$from to \$to\n";
select undef, undef, undef, \$sleep;
}

cheers

tachyon

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

• Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
• Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
• Read Where should I post X? if you're not absolutely sure you're posting in the right place.
• Posts may use any of the Perl Monks Approved HTML tags:
a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
• You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
 For: Use: & & < < > > [ [ ] ]
• Link using PerlMonks shortcuts! What shortcuts can I use for linking?

Create A New User
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (4)
As of 2018-03-18 09:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When I think of a mole I think of:

Results (229 votes). Check out past polls.

Notices?