lunlumo #6394(2008/05/31 10:22 GMT) [ Erlang ] Rating0/0=0.00
プロセスと乱数の相性が悪い様なのでちょっとべたですが。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
-module(methinks_it_is_a_weasel). -import(io). -import(lists). -import(random). -export([start/0]). get_char(CS) -> lists:nth(random:uniform(length(CS)),CS). create(T,_,TS) when TS == 0 -> T; create(T,CS,TS) -> create([get_char(CS)|T],CS,TS-1). create(CS,TS) -> create("",CS,TS). create_text_list(TL,_,_,S) when S == 0 -> TL; create_text_list(TL,CS,TS,S) -> create_text_list([create(CS,TS)|TL],CS,TS,S-1). create_text_list(CS,TS,S) -> create_text_list([],CS,TS,S). rank(T,G) -> lists:foldl( fun({CT,CG},A) -> A + if CT == CG -> 1; true -> 0 end end, 0, lists:zip(T,G) ). sort_text_list(TL,G) -> lists:sort(fun(A,B) -> rank(A,G) > rank(B,G) end,TL). update_text(T,CS) -> P = random:uniform(length(T)), lists:append(lists:sublist(T,P-1),[get_char(CS)|lists:sublist(T,P+1,length(T)-P)]). update_text_list(TL,G,CS,S,N) -> lists:sublist( sort_text_list( lists:foldl( fun(T,A) -> lists:append( A, lists:map( fun(_) -> update_text(T,CS) end, lists:seq(1,N,1) ) ) end, [], TL ), G ), S ). process([T|TL],G,CS,S,N,I) -> R = rank(T,G), L = length(G), if R == L -> io:format("goal(~w):~p~n",[I,T]); true -> io:format("process(~w):~p(~w)~n",[I,T,rank(T,G)]), process(update_text_list([T|TL],G,CS,S,N),G, CS, S, N, I+1) end. start() -> G = "METHINKSITISAWEASEL", CS = lists:seq($A,$Z,1), S = 300, N = 5, process(sort_text_list(create_text_list(CS,length(G),S),G),G,CS,S,N,1).
Rating0/0=0.00-0+
[ reply ]
lunlumo #6394() [ Erlang ] Rating0/0=0.00
プロセスと乱数の相性が悪い様なのでちょっとべたですが。
-module(methinks_it_is_a_weasel). -import(io). -import(lists). -import(random). -export([start/0]). get_char(CS) -> lists:nth(random:uniform(length(CS)),CS). create(T,_,TS) when TS == 0 -> T; create(T,CS,TS) -> create([get_char(CS)|T],CS,TS-1). create(CS,TS) -> create("",CS,TS). create_text_list(TL,_,_,S) when S == 0 -> TL; create_text_list(TL,CS,TS,S) -> create_text_list([create(CS,TS)|TL],CS,TS,S-1). create_text_list(CS,TS,S) -> create_text_list([],CS,TS,S). rank(T,G) -> lists:foldl( fun({CT,CG},A) -> A + if CT == CG -> 1; true -> 0 end end, 0, lists:zip(T,G) ). sort_text_list(TL,G) -> lists:sort(fun(A,B) -> rank(A,G) > rank(B,G) end,TL). update_text(T,CS) -> P = random:uniform(length(T)), lists:append(lists:sublist(T,P-1),[get_char(CS)|lists:sublist(T,P+1,length(T)-P)]). update_text_list(TL,G,CS,S,N) -> lists:sublist( sort_text_list( lists:foldl( fun(T,A) -> lists:append( A, lists:map( fun(_) -> update_text(T,CS) end, lists:seq(1,N,1) ) ) end, [], TL ), G ), S ). process([T|TL],G,CS,S,N,I) -> R = rank(T,G), L = length(G), if R == L -> io:format("goal(~w):~p~n",[I,T]); true -> io:format("process(~w):~p(~w)~n",[I,T,rank(T,G)]), process(update_text_list([T|TL],G,CS,S,N),G, CS, S, N, I+1) end. start() -> G = "METHINKSITISAWEASEL", CS = lists:seq($A,$Z,1), S = 300, N = 5, process(sort_text_list(create_text_list(CS,length(G),S),G),G,CS,S,N,1).Rating0/0=0.00-0+
[ reply ]