<?xml version="1.0" encoding="windows-1252"?>
<node id="383677" title="Re^2: Finding longest palindrome from a string" created="2004-08-17 10:22:46" updated="2005-07-25 19:39:22">
<type id="11">
note</type>
<author id="180961">
Limbic~Region</author>
<data>
<field name="doctext">
&lt;br /&gt;
I took some advice and rebuilt the benchmark.  I disqualified anyone who didn't get accurate results, so be sure you didn't get disqualified due to my error in your code.  Here is the code that I used to generate the new palindromes:
&lt;readmore&gt;
&lt;CODE&gt;
#!/usr/bin/perl
use strict;
use warnings;

my @range = map { chr() } 32 .. 126;
open (PALINDROMES, '&gt;', 'palindromes.dat') or die "Unable to open palindromes.dat for writing : $!";
for ( 1 .. 10 ) {
    my $string;
    $string .= rand() &lt;= .3 ? gen_palindrome() : $range[ rand @range ] for 0 .. (rand 25) + 5;
    print PALINDROMES $string, "\n";
}
sub gen_palindrome {
    my $string;
    $string .= $range[ rand @range ] for 1 .. (rand 48) + 2;
    return $string . (rand() &lt; .5 ? $range[ rand @range ] : '') . reverse $string;
}
&lt;/CODE&gt;
&lt;/readmore&gt;
Here is the actually benchmark itself:
&lt;readmore&gt;
&lt;code&gt;
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark 'cmpthese';
use Test::More 'no_plan';
use CGI ':html';

my %contestant = (
    aristotle =&gt; sub {
        my $str = shift;
        my $rts = reverse $str;

        my $palindrome = '';
        for my $rotate_count ( 0 .. length( $str ) - 1 ) {
            my $mask = $str ^ $rts;

            # to distinguish adjacent palindromes
            substr $mask, $rotate_count, 0, "\1";

            while ( $mask =~ /\0{3,}/g ) {
                my $len = $+[0] - $-[0];
                next if $len &lt;= length $palindrome;
                my $offs = $-[0];
                --$offs if $offs &gt; $rotate_count;    # compensate for marker
                $palindrome = substr $str, $offs, $len;
            }

            substr $rts, 0, 0, chop $rts;
        }

        return $palindrome;
    },

    aristotle2 =&gt; sub {
        my $str = shift;
        my $rts = reverse $str;

        my $palindrome = '';
        my $minlen     = 3;
        for my $rotate_count ( 0 .. length( $str ) - 1 ) {
            my $mask = $str ^ $rts;

            # to distinguish adjacent palindromes
            substr $mask, $rotate_count, 0, "\1";

            while ( $mask =~ /\0{$minlen,}/g ) {
                my $offs = $-[0];
                --$offs if $offs &gt; $rotate_count;    # compensate for marker
                $palindrome = substr $str, $offs, $+[0] - $-[0];
                $minlen = 1 + length $palindrome;
            }

            substr $rts, 0, 0, chop $rts;
        }

        return $palindrome;
    },

    buu =&gt; sub {
        my @p;
        my $arg = shift;
        my $p = '';

        while ( $arg =~ /((.).?\2)/g ) {
            my $m = $1;
            while ( $arg =~ /((.)$m\2)/ ) {
                $m = $1;
            }
            if ( length( $m ) &gt; length( $p ) ) {
                $p = $m;
            }
        }

        return $p;
    },

    ccn =&gt; sub {
        local $_ = shift;
        my @n;
        for ( my $i = 0 ; $i &lt; length ; pos = $i++ ) {
            $n[ length $&amp; ] = $&amp; if /\G(.+).?(??{reverse  $1})/;
        }
        return @n ? $n[-1] : '';
    },

    ccn2 =&gt; sub {
        local $_ = shift;
        my $s = '';
        for ( my $i = 0 ; $i &lt; length ; pos = $i++ ) {
            $s = $&amp;
                if /\G(.+).?(??{reverse  $1})/
                and length( $s ) &lt; length( $&amp; );
        }
        return $s;
    },

    tune =&gt; sub {
        my $l = '';
        map { $l = $_ if ( $_ eq reverse $_ ) &amp;&amp; ( length $l &lt; length $_ ) }
            split /\s+/, $_[0];
        return $l;
    },

    random_walk =&gt; sub {
        my ( $left, $right, $pal, $i ) = ( "", "", "", 1 );
        my $test = join " ", @ARGV;
        for ( ; $i &lt; ( ( length $test ) / 2 ) + 2 ; $i++ ) {
            $left .= "(.)";
            $right = "(\\$i)" . $right;
            if ( $test =~ /$left.?$right/ ) { $pal = $&amp;; next }
            return $pal;
        }
    },

    clive =&gt; sub {
        my $rev = reverse $_[0];

        my $len = 0;
        my $d;
        for ( 0 .. length( $_[0] ) - 1 ) {
            my $c = join '',
                map { substr( $rev, $_, 1 ) eq substr( $_[0], $_, 1 ) ? 1 : 0 }
                0 .. length( $_[0] ) - 1;
            my $match =
                ( sort { length( $a ) &lt;=&gt; length( $b ) } $c =~ /(1+)/g )[-1];
            $match &gt; $len and $len = $match and $d = $c;
            $rev = substr( $rev, 1 ) . substr( $rev, 0, 1 );
        }
        $d =~ s/(.*)($len).*/substr($_[0],length($1),length($len))/e;
        return $d;
    },

    murugu =&gt; sub {
        my $x    = shift;
        my $prev = 0;
        my $max;
        while ( $x =~ /(([a-z0-9]+)[a-z0-9]?(??{reverse $2}))/gi ) {
            $max = $1 if ( length( $1 ) &gt; $prev );
            $prev = length $max;
        }
        $max;
    },

    jasper =&gt; sub {
        $_ = pop;
        s/\s//sg;
        my @a;
        do {
            push @a, $1 if /((.*).?(??{reverse$2}))/i;
        } while s/.//;
        ( sort { length( $b ) &lt;=&gt; length $a } @a )[0];
    },

    deibyz =&gt; sub {
        my $match = '';
        while ( /.*?(.+)(.?)((??{reverse$1})).*?/g ) {
            $match = $1 . $2 . $3 if length( $1 . $2 . $3 ) &gt; length( $match );
        }
        $match;
    },

    limbic_region =&gt; sub {
        my @lookup;
        my ($index, $record, $counter) = (0,0,0);
        my $reverse = reverse $_[0];
        my $end = length $_[0];
        my $template = 'c' x $end;
        --$end;
        unshift @{ $lookup[ $_ ] }, $counter++ for unpack( $template, $_[0] );
        for ( unpack( $template, $_[0] ) ) {
            my $start = pop @{ $lookup[ $_ ] };
            for ( @{ $lookup[ $_ ] } ) {
                my $length = $_ - $start + 1;
                last if $length &lt;= $record;
                if ( substr($_[0], $start, $length) eq substr($reverse, $end - $_, $length) ) {
                    ($index, $record) = ($start, $length);
                    last;
                }
            }
        }
        return substr($_[0], $index, $record);
    },

    bgreenlee =&gt; sub {
        my $str     = shift;
        my $longest = '';
        while ( $str =~ /(?=(.*)(.?)((??{reverse $1})))/g ) {
            $longest = "$1$2$3" if length( "$1$2$3" ) &gt; length( $longest );
        }
        return $longest;
    },

    browseruk =&gt; sub {
        my $string = shift;
        my @pals;
        while ( $string =~ m[(.) (?=( (?:\1) | (?:.\1) ) ) ]gx ) {
            my ( $left, $right ) = ( $-[0], $+[-1] );

            while ( $left
                and $right &lt; length( $string )
                and substr( $string, $left, 1 ) eq substr( $string, $right, 1 )
                )
            {
                $left--;
                $right++;
            }
            my $pal = substr( $string, $left, $right - $left );

            if ( !@pals or length( $pals[-1] ) &lt; length( $pal ) ) {
                @pals = $pal;
            }
            else {
                push @pals, $pal unless @pals;
            }
        }
        return wantarray ? $pals[0] : @pals;
    },

    jdporter =&gt; sub {
        local $_ = shift;
        my $pal;
        for my $i ( 0 .. length( $_ ) ) {
            last if defined( $pal ) &amp;&amp; length( $_ ) - $i &lt; length( $pal );
            my $j = rindex $_, substr( $_, $i, 1 );
            while ( $j &gt; $i ) {
                my $s = substr $_, $i, $j - $i + 1;
                if ( $s eq reverse $s )    # it's a palindrome
                {                          # but is it the longest yet found?
                    $pal = $s
                        unless defined $pal &amp;&amp; length( $pal ) &gt; length( $s );
                }
                $j--;
                $j = rindex $_, substr( $_, $i, 1 ), $j;
            }
        }
        $pal;
    },

    elgon =&gt; sub {
        use POSIX qw(ceil);
        my $string = shift;
        my %char_hash = map { $_ =&gt; 1 } split //, $string;
        foreach my $key ( keys %char_hash ) {
            my @appearances;
            for ( my $i = 0 ; $i &lt; length( $string ) ; $i++ ) {
                push( @appearances, $i ) if substr( $string, $i, 1 ) eq $key;
            }
            foreach my $start ( @appearances ) {
                foreach my $finish ( reverse @appearances ) {
                    next if $start &gt;= $finish;
                    my $half_length = ceil( ( $finish - $start + 1 ) / 2 );
                    return
                        substr( $string, ( $start ), ( $finish - $start + 1 ) )
                        if substr( $string, $start, $half_length ) eq
                        reverse substr( $string, ( $finish - $half_length + 1 ),
                        $half_length );
                }
            }
        }
        return "FAILED!";
    },
    fizbin =&gt; sub {
	no warnings;
	no strict;
        return $_[0] unless ($_[0] and length($_[0]) &gt; 1);
        my @string = (300, unpack("U*", $_[0]), 301);
        my $palstart, $palend;
        my ($bestlen, $beststart, $bestend) = (-1,-1,-1);
        for ($palmid = 1; $palmid &lt; $#string; $palmid++)
        {
          if ($string[$palmid] == $string[$palmid+1])
          { # try even-length palindrome
            ($palstart, $palend) = ($palmid, $palmid+1);
            while ($string[$palend+1] == $string[$palstart-1])
            {
              $palend++; $palstart--;
            }
            if ($bestlen &lt; $palend - $palstart)
            {
                ($bestlen, $bestend, $beststart) =
                ($palend - $palstart, $palend, $palstart);
            }
          }
          # try odd-length palindrome
          ($palstart, $palend) = ($palmid, $palmid);
          while ($string[$palend+1] == $string[$palstart-1])
          {
            $palend++; $palstart--;
          }
          if ($bestlen &lt; $palend - $palstart)
          {
            ($bestlen, $bestend, $beststart) =
                ($palend - $palstart, $palend, $palstart);
          }
        }
        pack("U*", @string[$beststart..$bestend]);
    },

    japhy =&gt; sub {
our$P="";pop=~m{(.+).?(??{reverse$1})
(?{length$P&lt;length$&amp;and$P=$&amp;})^}xs;$P
    },

    japhy2 =&gt; sub {
our@P="";pop=~m{(.+).?(??{reverse$
1})(?{$P[length$&amp;]=$&amp;})^}xs;$P[-1]
    },
);

my @input;
while ( &lt;DATA&gt; ) {
    tr/\r\n//d;
    last if /## CORRECT ##/;
    push @input, $_;
}

my @correct;
while ( &lt;DATA&gt; ) {
    tr/\r\n//d;
    push @correct, $_;
}

for my $user ( sort keys %contestant ) {
    print "Validating $user\n";
    if ( $user eq 'buu' ) {
        print "Skipping buu : infinite loop?\n";
	delete $contestant{$user};
        next;
    }
    my @result = map {
        my $result;
        eval { $result = $contestant{ $user }-&gt;( $_ ) };
        $@ ? 'FAILED' : $result;
    } @{[ @input ]};
    for( 0 .. $#input ) {
        if ( $_ == 25 &amp;&amp; $user eq 'jdporter' ) {
            is 1, 1, "$user test $_";
            next;
        }
        is $result[ $_ ], $correct[ $_ ], "$user test $_";
        if ( $result[ $_ ] ne $correct[ $_ ] ) {
            print STDERR "Disqualifying $user\n";
            delete $contestant{$user};
            last;
        } 
    }
}

print "\nRunning benchmark\n";

my $result = cmpthese( 0, { map +( $_ =&gt; do {
    my $user = $_;
    sub { $contestant{ $user }-&gt;( $_ ) for @{[ @input ]} };
} ), keys %contestant }, "none" );

print map Tr( td( $_ ) )."\n", @$result;
__DATA__
HuR4H(w~kz;5&amp;|qQu:{LmmL{:uQq|&amp;5;zk~w(H4RuHF"lG$R]9XlW;.*ylw#34yy0FO&lt;uFOnTTnOFu&lt;OF0yy43#wly*.;WlX9]R$Gl"FcSy!t4prSOo&gt;YO0)\_-&lt;\BM!1T%uZu_B+fKJsZ"aMzr((rzMa"ZsJKf+B_uZu%T1!MB\&lt;-_\)0OY&gt;oOSrp4t!/?0/
$YKE&amp;Rn?s#P}AdPPdA}P#s?nR&amp;EKYPpMHv|/Rx/0Bey?Z'URS&gt;Z=gwcgcwg=Z&gt;SRU'Z?yeB0/xR/|vHMp!A$9?sc}K2Oxz48YtbTZ%(Hx3y"|pwf@$J3W1&gt;&gt;1W3J$@fwp|"y3xH(%ZTbtY84zxO2K}cs?9$G9Q 6~I0o] U&amp;p}itN9:RB6'1cw+00Omf&gt;4:zgtzM+vsv+Mztgz:4&gt;fmO00+wc1'6BR:9Nti}p&amp;U ]o0I~6 QL+Ja"iri"aJ+Lq!D|UtFSq~/Lq-+EGurruGE+-qL/~qSFtU|D!q{I\cu1
.W1g"IW$nAb/,ruur,/bAn$WI"g1]C~f:|BHL?[C@cc[)vjff{1*Gv7:OWGN$-:&gt;71"6ybFE$^V^$EFby6"17&gt;:-$NGWO:7vG*1{ffjv)[cc@C[?LHBu^4%mJcTcJm%4^]]AL78?*!?SHHS?!*?87LA]]a S]leGx]taat]xGeej5}6M.11.M6}5jeJI4O5QcL~(8i+t6fL9.%z\+g22g+\z%.9Lf6t+i8(~LcQ5O4IJ$U+O#mGaAxbqw`9f}}f9`wqbxAaGm#O+F&amp;9&gt;aVTyy?X&gt;t&gt;X?yyTVa&gt;9&amp;F+OB
/W8~u}A:\u$hR|}tAs|j2z!RvR!z2j|sAt}|Rh$u\:A}u~CHH+P+dkl~wZz'3r{r\C9kBXf?r]I/8/VI,AQrD0{&lt;||&lt;{0DrQA,IV/8/I]r?fXBk9C\r{r3'zZw~lkd+P+HHCu{8UQdf\YP~V9On27&gt;72nO9V~PY\fdQUb%) #oeW3:.&amp;_M((M_&amp;.:3Weo# -atJE ")WyByW)" EJtK}mKzLQ7#5qIE9_Z!m"^]KrJAI&gt;e&amp;-/O=%'%=O/-&amp;e&gt;IAJrK]^"m!Z_9EIq5#7QLzKm}.Bw
k2\%C6/-0SA_JDw~_R*3=Q+-Gji^\&gt;U3/N/3U&gt;\^ijG-+Q=3*R_~wDJ_AS0-/6C%\2k4kr m/;-{0#i&amp;lp[j(6=[=6(j[pl&amp;i#0{i_7m[$/Ma'Z0JD8:(:U[24Wr["EB{2?Ox6n|#7$99$7#|n6xO?2{BE"[rW42[U:(:8DJ0Z'aM/$[m7_i
1t5MqqM5tK$zSuf7fuSzW!X7Oy""yO7X!W}{3?*TIIdAd5&amp;(1CLTtf?!!?ftTLC1(&amp;5dAdIIT*?3{[e&amp;$i|YEZ~5QX-Tk?RzW(#C%&gt;  &gt;%C#(WzR?kT-XQ5~ZEY|i$&amp;e[wDAF her$f=\;;\=f$reh FADw&amp;cL&lt;65q9'-Q=3Ht]2BOBOB2]tH3=Q-'9q56&lt;Lc/D2!y9fA+\)(y])sMv5?n3kU,qq,Uk3n?5vMs)]y()\+Af9y!2Du
QhKm(llYai)&gt;gaO)zf+Ew|!0"}G~&lt;`\PcP+(fA+P+Af(+PcP\`&lt;~G}"0!|wE+fz)Of&lt;VO]]e899Ud.k&lt;%/'5_#w(Z7bJ?W:::x\X;]hSZ\!X/BFQ"8w8"QFB/X!\ZSh];X\x:::W?Jb7Z(w#_5'/%&lt;k.dU998e]]OV&lt;8x+m6!Iw%'|:MYjX8_]M+gt#v%9xdx|v/W`Z&amp;;]Eh_mnCnm_hE];&amp;Z`W/v|xdx9%v#tg+M]_8XjYM:|'%wI!6m+x8XB
5&amp;o1J,*6sd!C,C!ds6*,J1o&amp;5EM%;U58CJd|otnl3!!3lnto|dJC85U;%Mn'O
!7HJ8)&lt;*o5m{""{m5o*&lt;)8Jru_Z+'yz&lt;Z5|!9s7rEXCDVi)4xmq~6,\sm.8s`JH5B7G_6?c^JqjqJ^c?6_G7B5HJ`s8.ms\,6~qmx4)iVDCXEr7s9!|5Z&lt;zy'+Z_CC :!LX;i]i~v&gt;W i5pn'&lt;I`c{-2#5^,{5=/ u}sD^iSQQSi^Ds}u /=5{,^5#2-{c`I&lt;'np5i W&gt;v~i]i;XL!:p`XRC 7M?6_FIbg3c2Z}=}Z2c3gbIF_6?M7 C)hC9JS.WRIO!G1G&amp;-SteytXZ^8B'B8^ZXtyetS-&amp;G1G!OIRW.SJ9ChP`,xc*i*cx,`P)V 
*70l{5Zz#(jf%V&gt;?,5Ij+IZ\gE&amp;?V.*S6w?w6S*.V?&amp;Eg\ZI+jI5,?&gt;V%fj(#zZ5{l0v2a1UDre;Rw6c`4t3V_D?&amp;S(zP+Coz` Ip.H82y-H^'0QMnnMQ0'^H-y28H.pI `zoC+Pz(S&amp;?D_V3t4`c6wR;erDU1akzJ'&lt;_?(HFCKHmK@~X2FK#Ix*p#\M*0\K\0*M\#p*xI#KF2X~@KmHKCFH]bd,9&gt;`&lt;duN[YM#GO}D~8bo1O1DCZGn)\.ilikOQ`f8@@8f`QOkili.\)nGZCD1O1ob8~D}OG#MY[Nud&lt;`&gt;9,db`c!qjSvr?whfM[l~gQ\H(u(H\Qg~l[Mfhw?rvSjq!c`fn8t;~)y7tIz9KUQ='%#DbxG'&amp;r0-FGtgf#,n#axd0M(0t5=A"K"A=5t0(M0dxa#n,#fgtGF-0r&amp;'GxbD#%'=QUK9zIt7y)~;t7Dd_w^?Mm0PxP0mM?^w_dm#
leostddtsoelirknmxrhwfuzoozufwhrjnwytnybfrrrrfbyntywnfxmqrepfcdojyovxeyaeeayexvoyjodcfperqmx
xrurqyovghhybqvbhvyyvhbvqbyhhgvoyqrrrppmycvoovcympprr
zrrpmmlygeyeqrttinhklxfccfxlkhnittrqeyegylryovaaavduooudvaaavoyttugqcihjrnmnmiywwyimnmnrjhicqgutdijvmpofmppmfopmvjimuccqieaeixkgzlpddplzgkxieaeiqccumkagegqqgegakyuplcymxfrbpdzkzryxlxtmzvvzmtxlxyrzkzdpbrfxm
kreguugerfumcvzzvcmujtfjgwsjgfphkusqlgggglqsukhpfgjswsfmujzzjumfs
dhmopumbwennjaalwwlaajnnewbmupomwbyzrryoynrrokdiidkorrnyoyrrzllssllioyllrsnmffmnsrllvsttfeymdjjxbccbxjjdmxlwaiqjkyvsgzppzgsvykjqiawbgeingpaywctdaadtcwyapgnie
mzvnytslsnqadhcsccschdaqnsxvuhrhcnrrnchrhuvxswetuutewdctvkolvipbelnbbnlebpivlokvt
cwxfymnrrnmyqiu
lamhzzcwlwoowlwczzzqeeavmfqvfsywwysfvqfmvaeequmycckptworpfyheawviuvaupnnpuavuivwaehyfprowt
frfbkjwtdgqqgdtwjkbfrfhiloxilguyqbssmbllbmssbqyucxjfjhjwkciuzjjzuickwjto
cvynpiipnyvcjybdltorcntkhpxpwcrvdjjdvrcwpxphktncrotlirekrmokbqkqaaqkqbkomrkerigxknxhekcdmuecceumdckehxneqzxkqryadbfzxvwwvxzfbdayrqkxzqe
heucfmybrgwtikfussufkitwgrktxt
dsdadadcccasdasd
ababbab
1111111121111111111112111111111111111111111112111111111111211111
ababacababacadacababacadaeadacabaz
sacascascsacascascascadvgkgjsflfjgfk
abcdedcbabcdefgfedcbabcdefghijklmnonmlkjihgfedcbabcdefghijklkjihgfedcbabcdefghijklmnoponmlkjihgfedcba
bbabbbabbb
27103271037013711111111111111111116111111111111111111111166026111111111111111111111111111111111111111111111111111611111111111111111
61111111111111111111111111111111111111111111111111116
abcdefghijklmnopqrstuvwxyz12345678987654321zyxwvutsrqponmlkjihgfedcba
ababcbabcdcbabcdedcbabcdefedcbabcdefgfedcbababcbabcdcbabcdedcbabcdefedcbabcdefgfedcba
edcbabcdefedcbabcde
abcdedcbabcdefgfedcbabcdefghijklmnonmlkjihgfedcbabcdefghijklkjihgfedcbabcdefghijklmnoponmlkjihgfedcba
onmlkjihgfedcbabcdefghijklkjihgfedcbabcdefghijklmno
2710327103701371111111111111111111611111111111111111111116602611111111
## CORRECT ##
!t4prSOo&gt;YO0)\_-&lt;\BM!1T%uZu_B+fKJsZ"aMzr((rzMa"ZsJKf+B_uZu%T1!MB\&lt;-_\)0OY&gt;oOSrp4t!
Q 6~I0o] U&amp;p}itN9:RB6'1cw+00Omf&gt;4:zgtzM+vsv+Mztgz:4&gt;fmO00+wc1'6BR:9Nti}p&amp;U ]o0I~6 Q
BHL?[C@cc[)vjff{1*Gv7:OWGN$-:&gt;71"6ybFE$^V^$EFby6"17&gt;:-$NGWO:7vG*1{ffjv)[cc@C[?LHB
CHH+P+dkl~wZz'3r{r\C9kBXf?r]I/8/VI,AQrD0{&lt;||&lt;{0DrQA,IV/8/I]r?fXBk9C\r{r3'zZw~lkd+P+HHC
i_7m[$/Ma'Z0JD8:(:U[24Wr["EB{2?Ox6n|#7$99$7#|n6xO?2{BE"[rW42[U:(:8DJ0Z'aM/$[m7_i
[e&amp;$i|YEZ~5QX-Tk?RzW(#C%&gt;  &gt;%C#(WzR?kT-XQ5~ZEY|i$&amp;e[
&lt;VO]]e899Ud.k&lt;%/'5_#w(Z7bJ?W:::x\X;]hSZ\!X/BFQ"8w8"QFB/X!\ZSh];X\x:::W?Jb7Z(w#_5'/%&lt;k.dU998e]]OV&lt;
M%;U58CJd|otnl3!!3lnto|dJC85U;%M
_Z+'yz&lt;Z5|!9s7rEXCDVi)4xmq~6,\sm.8s`JH5B7G_6?c^JqjqJ^c?6_G7B5HJ`s8.ms\,6~qmx4)iVDCXEr7s9!|5Z&lt;zy'+Z_
t;~)y7tIz9KUQ='%#DbxG'&amp;r0-FGtgf#,n#axd0M(0t5=A"K"A=5t0(M0dxa#n,#fgtGF-0r&amp;'GxbD#%'=QUK9zIt7y)~;t
xmqrepfcdojyovxeyaeeayexvoyjodcfperqmx
rqyovghhybqvbhvyyvhbvqbyhhgvoyqr
mxfrbpdzkzryxlxtmzvvzmtxlxyrzkzdpbrfxm
wsjgfphkusqlgggglqsukhpfgjsw
mopumbwennjaalwwlaajnnewbmupom
tvkolvipbelnbbnlebpivlokvt
ymnrrnmy
tworpfyheawviuvaupnnpuavuivwaehyfprowt
frfbkjwtdgqqgdtwjkbfrf
ltorcntkhpxpwcrvdjjdvrcwpxphktncrotl
rgwtikfussufkitwgr
dadad
babbab
1111121111111111112111111111111111111111112111111111111211111
acababacadacababaca
cascsac
onmlkjihgfedcbabcdefghijklkjihgfedcbabcdefghijklmno
bbabbbabb
61111111111111111111111111111111111111111111111111116
61111111111111111111111111111111111111111111111111116
abcdefghijklmnopqrstuvwxyz12345678987654321zyxwvutsrqponmlkjihgfedcba
edcbabcdefedcbabcde
edcbabcdefedcbabcde
onmlkjihgfedcbabcdefghijklkjihgfedcbabcdefghijklmno
onmlkjihgfedcbabcdefghijklkjihgfedcbabcdefghijklmno
111111111111111111161111111111111111111
&lt;/code&gt;
&lt;/readmore&gt;
And here are the results:
&lt;readmore&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;Rate&lt;/td&gt; &lt;td&gt;jdporter&lt;/td&gt; &lt;td&gt;limbic_region&lt;/td&gt; &lt;td&gt;aristotle&lt;/td&gt; &lt;td&gt;fizbin&lt;/td&gt; &lt;td&gt;aristotle2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;jdporter&lt;/td&gt; &lt;td&gt;23.4/s&lt;/td&gt; &lt;td&gt;--&lt;/td&gt; &lt;td&gt;-20%&lt;/td&gt; &lt;td&gt;-28%&lt;/td&gt; &lt;td&gt;-41%&lt;/td&gt; &lt;td&gt;-43%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;limbic_region&lt;/td&gt; &lt;td&gt;29.4/s&lt;/td&gt; &lt;td&gt;26%&lt;/td&gt; &lt;td&gt;--&lt;/td&gt; &lt;td&gt;-9%&lt;/td&gt; &lt;td&gt;-26%&lt;/td&gt; &lt;td&gt;-29%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;aristotle&lt;/td&gt; &lt;td&gt;32.3/s&lt;/td&gt; &lt;td&gt;38%&lt;/td&gt; &lt;td&gt;10%&lt;/td&gt; &lt;td&gt;--&lt;/td&gt; &lt;td&gt;-18%&lt;/td&gt; &lt;td&gt;-22%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;fizbin&lt;/td&gt; &lt;td&gt;39.5/s&lt;/td&gt; &lt;td&gt;69%&lt;/td&gt; &lt;td&gt;34%&lt;/td&gt; &lt;td&gt;22%&lt;/td&gt; &lt;td&gt;--&lt;/td&gt; &lt;td&gt;-5%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;aristotle2&lt;/td&gt; &lt;td&gt;41.4/s&lt;/td&gt; &lt;td&gt;77%&lt;/td&gt; &lt;td&gt;41%&lt;/td&gt; &lt;td&gt;28%&lt;/td&gt; &lt;td&gt;5%&lt;/td&gt; &lt;td&gt;--&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/readmore&gt;
&lt;div class="pmsig"&gt;&lt;div class="pmsig-180961"&gt;
&lt;p&gt;
Cheers - [Limbic~Region|L~R]
&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</field>
<field name="root_node">
382567</field>
<field name="parent_node">
383423</field>
</data>
</node>
