ハノイの塔(Perl版)
http://twitter.com/tomotaka_ito/status/24445961129
後輩がやってる課題作成のやつをやってみたらハノイの塔をPerlで解くというお題だったので挑戦してみた。
$n = $ARGV[0]; print "N = $n\n"; $s=[[],[],[]]; for($i=$n;1<=$i;$i--){push(@{$s[0]},$i);} sub movehanoi { my ($f, $t, $d) = @_; print "movehanoi($f, $t, $d)\n"; my @x = (1, 1, 1); $x[$f] = 0; $x[$t] = 0; my $tmp = -1; for (my $i = 0; $i < 3; $i++) { if ($x[$i] == 1) { $tmp = $x[$i]; last; } } if ($d == 1) { $popped = pop(@{$s[$f]}); push(@{$s[$t]}, $popped); printstack(); } else { movehanoi($f, $tmp, $d-1); movehanoi($f, $t, 1); movehanoi($tmp, $t, $d-1); } } sub printstack { print "-------------\n"; for ($i =0; $i < 3; $i++) { print "s[$i]=[".join(",", @{$s[$i]})."]\n"; } } printstack(); movehanoi(0, 2, $n);