Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
45
Task/Soundex/Erlang/soundex.erl
Normal file
45
Task/Soundex/Erlang/soundex.erl
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
-module(soundex).
|
||||
-export([soundex/1]).
|
||||
|
||||
soundex([]) ->
|
||||
[];
|
||||
soundex(Str) ->
|
||||
[Head|Tail] = string:to_upper(Str),
|
||||
[Head | isoundex(Tail, [], todigit(Head))].
|
||||
|
||||
isoundex([], Acc, _) ->
|
||||
case length(Acc) of
|
||||
N when N == 3 ->
|
||||
lists:reverse(Acc);
|
||||
N when N < 3 ->
|
||||
isoundex([], [$0 | Acc], ignore);
|
||||
N when N > 3 ->
|
||||
isoundex([], lists:sublist(Acc, N-2, N), ignore)
|
||||
end;
|
||||
isoundex([Head|Tail], Acc, Lastn) ->
|
||||
Dig = todigit(Head),
|
||||
case Dig of
|
||||
Dig when Dig /= $0, Dig /= Lastn ->
|
||||
isoundex(Tail, [Dig | Acc], Dig);
|
||||
_ ->
|
||||
case Head of
|
||||
$H ->
|
||||
isoundex(Tail, Acc, Lastn);
|
||||
$W ->
|
||||
isoundex(Tail, Acc, Lastn);
|
||||
N when N >= $A, N =< $Z ->
|
||||
isoundex(Tail, Acc, Dig);
|
||||
_ ->
|
||||
isoundex(Tail, Acc, Lastn) % This clause handles non alpha characters
|
||||
end
|
||||
end.
|
||||
|
||||
todigit(Chr) ->
|
||||
Digits = "01230120022455012623010202",
|
||||
HeadOff = Chr - $A + 1,
|
||||
case HeadOff of
|
||||
N when N > 0, N < 27 ->
|
||||
lists:nth(HeadOff, Digits);
|
||||
_ -> % Treat non alpha characters as a vowel
|
||||
$0
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue