10 lines
431 B
Plaintext
10 lines
431 B
Plaintext
Soundex[ input_ ] := Module[{x = input, head, body},
|
|
{head, body} = {First@#, Rest@#}&@ToLowerCase@Characters@x;
|
|
body = (Select[body, FreeQ[Characters["aeiouyhw"],#]&] /. {("b"|"f"|"p"|"v")->1,
|
|
("c"|"g"|"j"|"k"|"q"|"s"|"x"|"z")->2, ("d"|"t")->3,"l"->4 ,("m"|"n")->5, "r"->6});
|
|
If[Length[body] < 3,
|
|
body = PadRight[body, 3],
|
|
body = DeleteDuplicates[body]
|
|
];
|
|
StringJoin @@ ToString /@ PrependTo[ body[[1 ;; 3]], ToUpperCase@head]]
|