Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -module(solution).
- -export([main/0]).
- main() ->
- {ok,[Count]}=io:fread("","~d"),
- main(Count,[]).
- main(0,Acc) ->
- lists:foreach(fun(Elem) -> io:format("~s~n",[Elem]) end,lists:reverse(Acc));
- main(Count,Acc) ->
- {ok,[Str,SubStr]}=io:fread("","~s~s"),
- Table=create_table(SubStr,dict:new(),string:len(SubStr)-2),
- io:format("Table~p~n",[dict:to_list(Table)]),
- Res=find_str(Table,Str,SubStr),
- main(Count-1, [Res|Acc]).
- create_table(Str,Acc,Len) ->
- Check=string:slice(Str,1),
- if Check /= "" ->
- create_table(string:slice(Str,1),dict:store(string:slice(Str,1,1),Len,Acc),Len-1);
- Check == "" -> Acc end.
- find_str(_,"",SubStr) -> "NO";
- find_str(Table,Str,SubStr) ->
- Len=string:len(SubStr),
- LenStr=string:len(Str),
- if Len>LenStr -> "NO";
- Len=<LenStr ->
- LastSymbStr=string:sub_string(Str,Len,Len),
- LastSymbSub=string:sub_string(SubStr,Len,Len),
- io:format("sravnenie ~p s ~p~n",[LastSymbStr,LastSymbSub]),
- CharsEq=string:equal(LastSymbStr,LastSymbSub),
- if CharsEq==false ->
- case dict:find(LastSymbStr,Table) of
- error -> find_str(Table, string:slice(Str,1),SubStr);
- {ok,B} -> io:format("offset to ~p~n", [B]),
- find_str(Table,string:slice(Str,B),SubStr)
- end;
- true -> Eq=equal_str(string:sub_string(Str,1,Len),SubStr),
- if Eq ==true -> "YES";
- true -> find_str(Table, string:slice(Str,1),SubStr) end
- end
- end .
- equal_str([],[]) -> true;
- equal_str([_],[]) -> true;
- equal_str([A|S1],[B|S2]) ->
- if A==B ->
- equal_str(S1,S2);
- A/=B -> false
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement