RosettaCodeData/Task/Pancake-numbers/Perl/pancake-numbers.pl
2026-02-01 16:33:20 -08:00

23 lines
646 B
Perl

#!/usr/bin/perl
use strict; # https://rosettacode.org/wiki/Pancake_numbers
use warnings;
for my $n ( 1 .. 9 )
{
my @queue = my $last = join '', map chr 96 + $_, 1 .. $n;
my %seen = ($last => '');
while( @queue )
{
my ($stack, @flips) = split ' ', shift @queue;
for my $flip ( 2 .. $n )
{
my $new = (reverse substr $stack, 0, $flip) . substr $stack, $flip;
defined $seen{$new} or
push @queue, $last = $seen{$new} = "$new $flip @flips";
}
}
my ($stack, @flips) = split ' ', $last;
printf "%9s ", $stack;
printf "size %d score: %2d flip the top %s\n", $n, @flips + 0, "@flips";
}