Add tags

Add tags to the following comment

一つ席を確定しては、その党を割算して、その中から一つ席を確定して…と繰り返します。 答えはちゃんと出るけど、書きづらかったので、戦略的に良くないのかも。

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).

Add tags

The input will be splited to tags with space.

Index

Feed

Other

Link

Pathtraq

loading...