lunlumo #6413(2008/06/03 09:04 GMT) [ Erlang ] Rating0/0=0.00
以下実行結果です。 1> c(tic_tac_toe). {ok,tic_tac_toe} 2> tic_tac_toe:start(). first:5835,second:2957,draw:1208 ok
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
-module(tic_tac_toe). -import(io). -import(lists). -import(random). -export([start/0]). create_board() -> lists:map(fun(_) -> 0 end,lists:seq(1,9,1)). move(B,1,{C,_}) -> move(B,1,C); move(B,2,{_,C}) -> move(B,2,C); move(B,P,C) -> PS = C(B,P), lists:sublist(B,PS - 1) ++ [P|lists:sublist(B,PS + 1,length(B) - PS)]. check_pattern() -> lists:map(fun(X) -> lists:seq(X,X+6,3) end, lists:seq(1,3,1)) ++ lists:map(fun(X) -> lists:seq(X,X+2,1) end, lists:seq(1,7,3)) ++ [lists:seq(1,9,4),lists:seq(3,7,2)]. check(B,P) -> lists:any( fun(PT) -> lists:all( fun(ST) -> ST == P end, lists:map(fun(X) -> lists:nth(X,B) end, PT) ) end, check_pattern() ). process(B,P,C) -> BN = move(B,P,C), R = check(BN,P), D = lists:all(fun(ST) -> ST /= 0 end, BN), if R -> P; D -> 0; true -> process(BN, P rem 2 + 1, C) end. process(C) -> process(create_board(),1,C). random_choice(B,_) -> S = lists:map(fun({PS,_}) -> PS end, lists:filter(fun({_,X}) -> X == 0 end, lists:zip(lists:seq(1,length(B),1),B))), lists:nth(random:uniform(length(S)),S). start() -> R = lists:map(fun(_) -> process({fun random_choice/2,fun random_choice/2}) end,lists:seq(1,10000,1)), io:format("first:~w,second:~w,draw:~w~n",lists:map(fun(P) -> length(lists:filter(fun(X) -> X == P end, R)) end,[1,2,0])).
Rating0/0=0.00-0+
[ reply ]
lunlumo #6413() [ Erlang ] Rating0/0=0.00
以下実行結果です。 1> c(tic_tac_toe). {ok,tic_tac_toe} 2> tic_tac_toe:start(). first:5835,second:2957,draw:1208 ok-module(tic_tac_toe). -import(io). -import(lists). -import(random). -export([start/0]). create_board() -> lists:map(fun(_) -> 0 end,lists:seq(1,9,1)). move(B,1,{C,_}) -> move(B,1,C); move(B,2,{_,C}) -> move(B,2,C); move(B,P,C) -> PS = C(B,P), lists:sublist(B,PS - 1) ++ [P|lists:sublist(B,PS + 1,length(B) - PS)]. check_pattern() -> lists:map(fun(X) -> lists:seq(X,X+6,3) end, lists:seq(1,3,1)) ++ lists:map(fun(X) -> lists:seq(X,X+2,1) end, lists:seq(1,7,3)) ++ [lists:seq(1,9,4),lists:seq(3,7,2)]. check(B,P) -> lists:any( fun(PT) -> lists:all( fun(ST) -> ST == P end, lists:map(fun(X) -> lists:nth(X,B) end, PT) ) end, check_pattern() ). process(B,P,C) -> BN = move(B,P,C), R = check(BN,P), D = lists:all(fun(ST) -> ST /= 0 end, BN), if R -> P; D -> 0; true -> process(BN, P rem 2 + 1, C) end. process(C) -> process(create_board(),1,C). random_choice(B,_) -> S = lists:map(fun({PS,_}) -> PS end, lists:filter(fun({_,X}) -> X == 0 end, lists:zip(lists:seq(1,length(B),1),B))), lists:nth(random:uniform(length(S)),S). start() -> R = lists:map(fun(_) -> process({fun random_choice/2,fun random_choice/2}) end,lists:seq(1,10000,1)), io:format("first:~w,second:~w,draw:~w~n",lists:map(fun(P) -> length(lists:filter(fun(X) -> X == P end, R)) end,[1,2,0])).Rating0/0=0.00-0+
[ reply ]