Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,35 +0,0 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. Pancake.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 I PIC 9 VALUE 0.
|
||||
01 J PIC 9 VALUE 0.
|
||||
01 N PIC 99 VALUE 0.
|
||||
01 C PIC 99 VALUE 0.
|
||||
01 P PIC 99 VALUE 0.
|
||||
01 GAP PIC 99 VALUE 2.
|
||||
01 SUMA PIC 99 VALUE 2.
|
||||
01 ADJ PIC S99 VALUE -1.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
PERFORM VARYING I FROM 0 BY 1 UNTIL I > 3
|
||||
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 5
|
||||
COMPUTE N = (I * 5) + J
|
||||
ADD 1 TO C
|
||||
PERFORM PANCAKE-CALCULATION
|
||||
DISPLAY "P(" N ") = " P
|
||||
END-PERFORM
|
||||
END-PERFORM
|
||||
STOP RUN.
|
||||
|
||||
PANCAKE-CALCULATION.
|
||||
MOVE 2 TO GAP
|
||||
MOVE 2 TO SUMA
|
||||
MOVE -1 TO ADJ
|
||||
PERFORM UNTIL SUMA >= N
|
||||
ADD 1 TO ADJ
|
||||
COMPUTE GAP = (GAP * 2) - 1
|
||||
ADD GAP TO SUMA
|
||||
END-PERFORM
|
||||
COMPUTE P = N + ADJ.
|
||||
|
|
@ -1,43 +1,23 @@
|
|||
use strict;
|
||||
#!/usr/bin/perl
|
||||
|
||||
use strict; # https://rosettacode.org/wiki/Pancake_numbers
|
||||
use warnings;
|
||||
use feature 'say';
|
||||
|
||||
sub pancake {
|
||||
my($n) = @_;
|
||||
my ($gap, $sum, $adj) = (2, 2, -1);
|
||||
while ($sum < $n) { $sum += $gap = $gap * 2 - 1 and $adj++ }
|
||||
$n + $adj;
|
||||
}
|
||||
|
||||
my $out;
|
||||
$out .= sprintf "p(%2d) = %2d ", $_, pancake $_ for 1..20;
|
||||
say $out =~ s/.{1,55}\K /\n/gr;
|
||||
|
||||
# Maximum number of flips plus examples using exhaustive search
|
||||
sub pancake2 {
|
||||
my ($n) = @_;
|
||||
my $numStacks = 1;
|
||||
my @goalStack = 1 .. $n;
|
||||
my %newStacks = my %stacks = (join(' ',@goalStack), 0);
|
||||
for my $k (1..1000) {
|
||||
my %nextStacks;
|
||||
for my $pos (2..$n) {
|
||||
for my $key (keys %newStacks) {
|
||||
my @arr = split ' ', $key;
|
||||
my $cakes = join ' ', (reverse @arr[0..$pos-1]), @arr[$pos..$#arr];
|
||||
$nextStacks{$cakes} = $k unless $stacks{$cakes};
|
||||
}
|
||||
}
|
||||
%stacks = (%stacks, (%newStacks = %nextStacks));
|
||||
my $perms = scalar %stacks;
|
||||
my %inverted = reverse %stacks;
|
||||
return $k-1, $inverted{(sort keys %inverted)[-1]} if $perms == $numStacks;
|
||||
$numStacks = $perms;
|
||||
}
|
||||
}
|
||||
|
||||
say "\nThe maximum number of flips to sort a given number of elements is:";
|
||||
for my $n (1..9) {
|
||||
my ($a,$b) = pancake2($n);
|
||||
say "pancake($n) = $a example: $b";
|
||||
}
|
||||
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";
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue