#! perl -slw use strict; sub z { my $soFar = 1; my $lastC = substr $_[0], 0, 1; my $lastS = $lastC <=> substr $_[0], 1, 1; my $bestN = 0; for my $p ( 1 .. length( $_[0] )-1 ) { my $this = substr $_[0], $p, 1; my $d = abs( $this - $lastC ); my $s = $this <=> $lastC; $s *= -1 if $d == 9; if( $s != $lastS or $d != 1 and $d != 9 ) { $soFar = 1; $lastS = $s; } if( ++$soFar > $bestN ) { $bestN = $soFar; } $lastC = $this; } return $bestN; } while( ) { chomp; my $l = z( $_ ); print $_, ' : ', $l; } __DATA__ 01234567890987654321 01234567890123456789 78901234567890123456 98765432109876543210 21098765432109876543 012345678890123456789 789012345677890123456 987654321099876543210 210987654322109876543 012345678900987654321