2. Хонойские башни
Код:
print "Введите количество дисков: ";
chomp ($kol=<STDIN>);
for ($k=1; $k<=$kol; $k++)
{
push (@a,$k);
}
$ster1{nazv}='A';
$ster1{sost}=\@a;
$ster2{nazv}='B';
$ster3{nazv}='C';
print "\nНачальное состояние стержней: \n";
print "\tСтержень A: @{$ster1{sost}}\n\tСтержень B:\n\tСтержень C:\n\n";
bashni($kol,\%ster1,\%ster2,\%ster3);
sub bashni
{
my ($l,$st1,$st2,$st3)=@_;
my $dsk;
return if $l<=0;
bashni($l-1,$st1,$st3,$st2);
$sh++;
unshift(@{$st3->{sost}},$dsk=shift(@{$st1->{sost}}));
print "$sh: Перенос диска радиусом $dsk со стержня ","$st1->{nazv} на стержень $st3->{nazv}\n";
print "\tСтержень A: @{$ster1{sost}}\n";
print "\tСтержень B: @{$ster2{sost}}\n";
print "\tСтержень C: @{$ster3{sost}}\n\n";
bashni($l-1,$st2,$st1,$st3);
}