No, this one also counts similarities after the first differing character.
$x = "abcfff"; $y = "abcggg";
correctly gives 3, but just try out
$x = "abcfff"; $y = "abcgff";
which gives you 5 because of the matching "f"s.

This way it should work:
$_=$x^$y; $n=s/[^\0]//?$-[0]:()

A little toyed around with kynn's idea:
for(split//,$x){$_eq substr($y,$n++,1)||last}$n x=$n<length$y

-Christian


> -----Ursprüngliche Nachricht-----
> Von: Terje Kristensen [mailto:[EMAIL PROTECTED] 
> Gesendet: Mittwoch, 21. April 2004 07:49
> An: [EMAIL PROTECTED] Org
> Betreff: RE: mini-golf: first differing position
> 
> 
> This should work.
> 
> $_=$x^$y;$n=s/\0//g||undef
> 
> Terje
> 
> > -----Original Message-----
> > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, April 21, 2004 2:02 AM
> > To: [EMAIL PROTECTED]
> > Cc: [EMAIL PROTECTED]
> > Subject: Re: mini-golf: first differing position
> > 
> > 
> > 
> > 
> >    X-Original-To: [EMAIL PROTECTED]
> >    Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm
> >    X-Spam-Status: No, hits=0.3 required=7.0
> >        tests=NO_REAL_NAME
> >    X-Spam-Check-By: la.mx.develooper.com
> >    Date: Tue, 20 Apr 2004 19:57:27 -0400 (EDT)
> >    From: <[EMAIL PROTECTED]>
> > 
> > 
> > 
> > 
> >    We want to find out the first position $n at which 
> strings $x and $y
> >    differ.  If $x eq $y, then $n is undef.  If $x ne $y but $x is a
> >    prefix (aka initial segment) of $y, then $n should be 
> equal to length
> >    $x.  The operation must preserve both $x and $y (i.e. destructive
> >    operations are disallowed).
> > 
> >    By way of baseline, here's an utterly uninspired solution:
> > 
> >    $n=0;while(($c=substr($x,$n,1)||undef $n) && $c eq
> > substr($y,$n++,1)){;}
> > 
> > It's worse than uninspired, actually.  It's wrong.
> > 
> > kj
> 

Reply via email to