一発で決まる多数決

久しぶりのawkネタ

じゃんけんで出す手を使った多数決を考えます。
それぞれ出せる手は「グー」「チョキ」「パー」のいずれかです。
このとき、一番多くの人が出した手が勝つことになります。
例えば、6人で行うときは表1のように1回で勝者が決まる場合もあれば、表2のようにいずえも決まらない場合もあります。

表1:決まる場合

グー チョキ パー 結果
3人 2人 1人 グーの勝ち
1人 4人 1人 チョキの勝ち

表2:決まらない場合

グー チョキ パー 結果
2人 2人 2人 すべて同数のため決まらず
3人 0人 3人 グーとパーが同数のため決まらず

ある人数でじゃんけんをするとき、「一度で」勝つ手が決まる組み合わせは何通りか? 例えば4人の場合は表3のパターンにより、全部で12通り

表3 4人の場合は12通り

グー チョキ パー 結果
0人 0人 4人 パーの勝ち
0人 1人 3人 パーの勝ち
0人 2人 2人 決まらず
0人 3人 1人 チョキの勝ち
0人 4人 0人 チョキの勝ち
1人 0人 3人 パーの勝ち
1人 1人 2人 パーの勝ち
1人 2人 1人 パーの勝ち
1人 3人 0人 パーの勝ち
2人 0人 2人 決まらず
2人 1人 1人 グーの勝ち
2人 2人 0人 決まらず
3人 0人 1人 グーの勝ち
3人 1人 0人 グーの勝ち
4人 0人 0人 グーの勝ち

では、100人の場合、一度で勝つ手が決まるような人数の組み合わせは何通りか?

#!/usr/bin/awk -f

BEGIN{
    N = 100;

    cnt = 0;
    for(rock = 0;rock <= N;rock++){ # グーの人数
        for(scissors = 0;scissors <= N - rock;scissors++){
            # チョキの人数
            paper = N - rock - scissors; # パーの人数
            if(rock > scissors){
                if(rock != paper){
                    cnt++;
                }
            }else if(rock < scissors){
                if(scissors != paper){
                    cnt++;
                }
            }else{
                if(rock < paper){
                    cnt++;
                }
            }
        }
    }
    print cnt;
}

要するに、一番多い手がある場合のみカウントします。
実行してみる

awk -f q2_01.awk 
5100

意外と沢山ありますね。