# File lib/did_you_mean/jaro_winkler.rb, line 5defdistance(str1,str2)str1,str2 =str2,str1ifstr1.length>str2.lengthlength1,length2 =str1.length,str2.lengthm =0.0t =0.0range =length2>3?length2/2-1:0flags1 =0flags2 =0# Avoid duplicating enumerable objectsstr1_codepoints =str1.codepointsstr2_codepoints =str2.codepointsi =0whilei<length1last =i+rangej = (i>=range)?i-range:0whilej<=lastifflags2[j]==0&&str1_codepoints[i]==str2_codepoints[j]flags2|= (1<<j)flags1|= (1<<i)m+=1breakendj+=1endi+=1endk =i =0whilei<length1ifflags1[i]!=0j =index =kk =whilej<length2index =jbreak(j+1)ifflags2[j]!=0j+=1endt+=1ifstr1_codepoints[i]!=str2_codepoints[index]endi+=1endt = (t/2).floorm==0?0: (m/length1+m/length2+ (m-t)/m)/3end