Soundex: Difference between revisions

4,014 bytes added ,  5 years ago
No edit summary
Line 3,284:
Burrows B620 OK
O'Hara O600 OK</pre>
 
=={{header|Phix}}==
<lang Phix>constant soundex_alphabet = "0123012#02245501262301#202"
-- ABCDEFGHIJKLMNOPQRSTUVWXYZ
 
function soundex(string name)
string res = "0000"
integer rdx = 1, ch, this, prev
for i=1 to length(name) do
ch = upper(name[i])
if ch>='A' and ch<='Z' then
this = soundex_alphabet[ch-'A'+1]
if rdx=1 then
res[1] = ch
rdx = 2
prev = this
elsif this!='#' then
if this!='0' and this!=prev then
res[rdx] = this
if rdx=4 then exit end if
rdx += 1
end if
prev = this
end if
end if
end for
return res
end function
 
constant tests = {
{"Ashcraft", "A261"}, -- not "A226"
{"Ashcroft", "A261"}, -- not "A226"
{"Ashkrofd", "A261"}, -- not "A226"
{"Burroughs", "B620"},
{"Burrows", "B620"},
{"ciondecks", "C532"},
{"Example", "E251"},
{"Ekzampul", "E251"},
{"Ellery", "E460"},
{"Euler", "E460"},
{"Gauss", "G200"},
{"Ghosh", "G200"},
{"Gutierrez", "G362"},
{"He", "H000"},
{"Heilbronn", "H416"},
{"Hilbert", "H416"},
{"Honeyman", "H555"}, -- not "H500"
{"Jackson", "J250"},
{"Kant", "K530"},
{"Knuth", "K530"},
{"Lee", "L000"},
{"Ladd", "L300"},
{"Lloyd", "L300"},
{"Lissajous", "L222"},
{"Lukasiewicz", "L222"},
{"Moses", "M220"},
{"O'Hara", "O600"},
{"Pfister", "P236"}, -- not "P123"
{"Robert", "R163"},
{"Rupert", "R163"},
{"Rubin", "R150"},
{"r~@sum~@", "R250"},
{"Soundex", "S532"},
{"Sownteks", "S532"},
{"Tymczak", "T522"}, -- not "T520"
{"VanDeusen", "V532"},
{"Washington", "W252"},
{"Wheaton", "W350"},
{"Weeton", "W350"},
{"", "0000"},
{" ", "0000"},
{"12346", "0000"},
{"aaa a", "A000"}
}
 
for i=1 to length(tests) do
string {name,expected} = tests[i],
res = soundex(name),
ok = iff(res=expected?"":"*** ERROR ***")
printf(1,"%-12s -> %s %s\n",{name,res,ok})
end for</lang>
{{out}}
<pre>
Ashcraft -> A261
Ashcroft -> A261
Ashkrofd -> A261
Burroughs -> B620
Burrows -> B620
ciondecks -> C532
Example -> E251
Ekzampul -> E251
Ellery -> E460
Euler -> E460
Gauss -> G200
Ghosh -> G200
Gutierrez -> G362
He -> H000
Heilbronn -> H416
Hilbert -> H416
Honeyman -> H555
Jackson -> J250
Kant -> K530
Knuth -> K530
Lee -> L000
Ladd -> L300
Lloyd -> L300
Lissajous -> L222
Lukasiewicz -> L222
Moses -> M220
O'Hara -> O600
Pfister -> P236
Robert -> R163
Rupert -> R163
Rubin -> R150
r~@sum~@ -> R250
Soundex -> S532
Sownteks -> S532
Tymczak -> T522
VanDeusen -> V532
Washington -> W252
Wheaton -> W350
Weeton -> W350
-> 0000
-> 0000
12346 -> 0000
aaa a -> A000
</pre>
 
=={{header|PHP}}==
7,815

edits