Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
41
Task/Soundex/Picat/soundex.picat
Normal file
41
Task/Soundex/Picat/soundex.picat
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
go =>
|
||||
Names = split("Lloyd Woolcock Donnell Baragwanath Williams Ashcroft Ashcraft Euler
|
||||
Ellery Gauss Ghosh Hilbert Heilbronn Knuth Kant Ladd Lukasiewicz Lissajous O'Hara"),
|
||||
SoundexNames = split("L300 W422 D540 B625 W452 A261 A261 E460
|
||||
E460 G200 G200 H416 H416 K530 K530 L300 L222 L222 O600"),
|
||||
|
||||
foreach({Name,Correct} in zip(Names, SoundexNames))
|
||||
S = soundex(Name),
|
||||
printf("%s: %s ",Name,S),
|
||||
if S == Correct then
|
||||
println("ok")
|
||||
else
|
||||
printf("not correct! Should be: %s\n", Correct)
|
||||
end
|
||||
end,
|
||||
nl.
|
||||
|
||||
soundex("", _) = "" => true.
|
||||
soundex(Word) = Soundex =>
|
||||
SoundexAlphabet = "0123012#02245501262301#202",
|
||||
Soundex = "",
|
||||
LastC = '?',
|
||||
foreach(Ch in Word.to_uppercase,
|
||||
C = ord(Ch), C >= 0'A', C <= 0'Z',
|
||||
Soundex.len < 4)
|
||||
ThisC := SoundexAlphabet[C-0'A'+1],
|
||||
Skip = false, % to handle '#'
|
||||
if Soundex.len == 0 then
|
||||
Soundex := Soundex ++ [Ch]
|
||||
elseif ThisC == '#' then
|
||||
Skip := true
|
||||
elseif ThisC != '0', ThisC != LastC then
|
||||
Soundex := Soundex ++ [ThisC]
|
||||
end,
|
||||
if Skip == false then
|
||||
LastC := ThisC
|
||||
end
|
||||
end,
|
||||
Soundex := Soundex.padRight(4,'0').
|
||||
|
||||
padRight(S,Len,PadChar) = S ++ [PadChar : _ in 1..Len-S.len].
|
||||
Loading…
Add table
Add a link
Reference in a new issue