sub fastolfe {
my $source = shift;
my $chop = shift;
local($_);
my %found;
$found{$_}++ while ($_ = chop($source)) ne '';
while (($_ = chop($chop)) ne '') {
return if --$found{$_} < 0;
}
my $result;
foreach (sort keys %found) {
$result .= $_ while $found{$_}--;
}
$result;
}
####
sub fast_merl {
my ($source, $chop) = @_;
local($_);
my %found;
$found{$_}++ while ($_ = chop($source)) ne '';
while (($_ = chop($chop)) ne '') {
return if --$found{$_} < 0;
}
return join "", map { $_ x $found{$_} } keys %found;
}
##
##
# demerphq's test set
Rate blakem merlyn demq_scan demerphq fastolfe fast_merl fast_c scan_c
blakem 479/s -- -24% -39% -44% -46% -47% -97% -98%
merlyn 629/s 31% -- -20% -27% -29% -30% -96% -97%
demq_scan 790/s 65% 26% -- -8% -11% -12% -95% -97%
demerphq 861/s 80% 37% 9% -- -3% -4% -95% -96%
fastolfe 887/s 85% 41% 12% 3% -- -1% -94% -96%
fast_merl 901/s 88% 43% 14% 5% 2% -- -94% -96%
fast_c 15708/s 3179% 2396% 1889% 1723% 1671% 1644% -- -31%
scan_c 22648/s 4627% 3499% 2767% 2529% 2453% 2415% 44% --
# simple success case
Rate blakem merlyn demerphq fastolfe fast_merl demq_scan fast_c scan_c
blakem 6244/s -- -14% -26% -32% -35% -43% -90% -93%
merlyn 7221/s 16% -- -14% -21% -24% -34% -89% -92%
demerphq 8429/s 35% 17% -- -8% -12% -23% -87% -91%
fastolfe 9181/s 47% 27% 9% -- -4% -16% -86% -90%
fast_merl 9563/s 53% 32% 13% 4% -- -12% -85% -90%
demq_scan 10908/s 75% 51% 29% 19% 14% -- -83% -88%
fast_c 65634/s 951% 809% 679% 615% 586% 502% -- -28%
scan_c 91428/s 1364% 1166% 985% 896% 856% 738% 39% --
# simple failure case
Rate blakem merlyn demerphq demq_scan fastolfe fast_merl scan_c fast_c
blakem 7759/s -- -39% -51% -60% -63% -63% -94% -94%
merlyn 12666/s 63% -- -20% -35% -39% -40% -89% -91%
demerphq 15783/s 103% 25% -- -19% -24% -26% -87% -89%
demq_scan 19581/s 152% 55% 24% -- -5% -8% -84% -86%
fastolfe 20720/s 167% 64% 31% 6% -- -2% -83% -85%
fast_merl 21209/s 173% 67% 34% 8% 2% -- -82% -85%
scan_c 119642/s 1442% 845% 658% 511% 477% 464% -- -14%
fast_c 139171/s 1694% 999% 782% 611% 572% 556% 16% --