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