vtwntmtn #5085(2008/01/01 11:37 GMT) [ Erlang ] Rating0/0=0.00
一つ席を確定しては、その党を割算して、その中から一つ席を確定して…と繰り返します。 答えはちゃんと出るけど、書きづらかったので、戦略的に良くないのかも。
1> c(dont). {ok,dont} 2> dont:dont([123, 4, 56, 78], 100). [48,1,21,30]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
-module(dont). -export([dont/2]). search(Fun, List) -> search(Fun, List, length(List), length(List) - 1). search(_, _, Max, 0) -> Max; search(Fun, List, Max, Idx) -> case Fun(lists:nth(Max, List), lists:nth(Idx, List)) of true-> search(Fun, List, Idx, Idx - 1); false -> search(Fun, List, Max, Idx - 1) end. replace(List, Idx, Ele) -> lists:sublist(List, 1, Idx - 1) ++ [Ele] ++ lists:sublist(List, Idx + 1, length(List)). dont(Vote, Quorum) -> dont([{X, 1, X} || X <- Vote], lists:duplicate(length(Vote), 0), Quorum). dont(_, Seat, 0) -> Seat; dont(Vote, Seat, Quorum) -> Max = search(fun({X, _, _}, {Y, _, _}) -> X < Y end, Vote), {_, B, C} = lists:nth(Max, Vote), NewVote = replace(Vote, Max, {C / (B + 1), B + 1, C}), NewSeat = replace(Seat, Max, lists:nth(Max, Seat) + 1), dont(NewVote, NewSeat, Quorum - 1).
Rating0/0=0.00-0+
[ reply ]
vtwntmtn
#5085()
[
Erlang
]
Rating0/0=0.00
一つ席を確定しては、その党を割算して、その中から一つ席を確定して…と繰り返します。 答えはちゃんと出るけど、書きづらかったので、戦略的に良くないのかも。
1> c(dont). {ok,dont} 2> dont:dont([123, 4, 56, 78], 100). [48,1,21,30]-module(dont). -export([dont/2]). search(Fun, List) -> search(Fun, List, length(List), length(List) - 1). search(_, _, Max, 0) -> Max; search(Fun, List, Max, Idx) -> case Fun(lists:nth(Max, List), lists:nth(Idx, List)) of true-> search(Fun, List, Idx, Idx - 1); false -> search(Fun, List, Max, Idx - 1) end. replace(List, Idx, Ele) -> lists:sublist(List, 1, Idx - 1) ++ [Ele] ++ lists:sublist(List, Idx + 1, length(List)). dont(Vote, Quorum) -> dont([{X, 1, X} || X <- Vote], lists:duplicate(length(Vote), 0), Quorum). dont(_, Seat, 0) -> Seat; dont(Vote, Seat, Quorum) -> Max = search(fun({X, _, _}, {Y, _, _}) -> X < Y end, Vote), {_, B, C} = lists:nth(Max, Vote), NewVote = replace(Vote, Max, {C / (B + 1), B + 1, C}), NewSeat = replace(Seat, Max, lists:nth(Max, Seat) + 1), dont(NewVote, NewSeat, Quorum - 1).Rating0/0=0.00-0+
[ reply ]