Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
35
Task/Semordnilap/Erlang/semordnilap.erl
Normal file
35
Task/Semordnilap/Erlang/semordnilap.erl
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#!/usr/bin/env escript
|
||||
main([]) -> main(["unixdict.txt"]);
|
||||
|
||||
main([DictFile]) ->
|
||||
Dict = sets:from_list(read_lines(DictFile)),
|
||||
Semordnilaps =
|
||||
lists:filter(fun([W,R]) -> W < R end,
|
||||
lists:map(fun(W) -> [W, lists:reverse(W)] end,
|
||||
semordnilaps(Dict))),
|
||||
io:fwrite("There are ~b semordnilaps in ~s~n",
|
||||
[length(Semordnilaps), DictFile]),
|
||||
lists:map(fun([W,R]) -> io:fwrite("~s/~s~n", [W, R]) end,
|
||||
lists:sort(lists:sublist(shuffle(Semordnilaps),1,5))).
|
||||
|
||||
read_lines(Filename) when is_list(Filename) ->
|
||||
{ ok, File } = file:open(Filename, [read]),
|
||||
read_lines(File);
|
||||
|
||||
read_lines(File) when is_pid(File) ->
|
||||
case file:read_line(File) of
|
||||
{ok, Data} -> [chop(Data) | read_lines(File)];
|
||||
eof -> []
|
||||
end.
|
||||
|
||||
is_semordnilap(Word, Dict) ->
|
||||
Rev = lists:reverse(Word),
|
||||
sets:is_element(Word, Dict) and sets:is_element(Rev, Dict).
|
||||
|
||||
semordnilaps(Dict) ->
|
||||
lists:filter(fun(W) -> is_semordnilap(W, Dict) end, sets:to_list(Dict)).
|
||||
|
||||
shuffle(List) ->
|
||||
[X||{_,X} <- lists:sort([ {random:uniform(), N} || N <- List])].
|
||||
|
||||
chop(L) -> [_|T] = lists:reverse(L), lists:reverse(T).
|
||||
Loading…
Add table
Add a link
Reference in a new issue