4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

問題:
神経衰弱と呼ばれるトランプゲームのシミュレーションを行います。数字が書かれたトランプを縦 H 枚、横 W 枚の長方形の形に並べた状態でスタートします。トランプには1〜13の数字のうちどれかが書かれており、同じ数字のトランプが複数存在します。プレイヤーが N 人おり、各プレイヤーがトランプをめくっていき、めくった2枚のトランプに同じ数字が書かれていればそのトランプを取り除きます。ゲームの初期状態とトランプの記録が与えられるので、各プレイヤーが取り除いたトランプの枚数を求めます。

入力値:

H W N
t_{1,1} t_{1,2} ... t_{1,W}
t_{2,1} t_{2,2} ... t_{2,W}
...
t_{H,1} t_{H,W}
L
a_1 b_1 A_1 B_1
a_2 b_2 A_2 B_2
...
a_L b_L A_L B_L

期待される出力値:

各プレイヤーが取り除いたトランプの枚数を出力してください

条件:

  • 1 ≦ H, W ≦ 13
  • H × W は52以下の2の倍数
  • 2 ≦ N ≦ 10
  • t_{i,j} は 1 〜 13 のいずれか
  • トランプには同じ数字が2枚または4枚存在
  • 1 ≦ L ≦ 200
  • 1 ≦ a_i, A_i ≦ H
  • 1 ≦ b_i, B_i ≦ W
  • (a_i, b_i) ≠ (A_i, B_i)

Pythonプログラム:

import sys
input = sys.stdin.read

def main():
    # 入力を読み込む
    data = input().strip().split()
    index = 0

    # H: 縦の枚数, W: 横の枚数, N: プレイヤーの数
    H = int(data[index])
    W = int(data[index + 1])
    N = int(data[index + 2])
    index += 3

    # トランプの状態を読み込む
    cards = []
    for i in range(H):
        row = []
        for j in range(W):
            row.append(int(data[index]))
            index += 1
        cards.append(row)

    # L: 記録の長さ
    L = int(data[index])
    index += 1

    # 各プレイヤーが取り除いたトランプの枚数
    removed_counts = [0] * N

    # ゲームの記録を処理する
    current_player = 0
    for _ in range(L):
        a, b, A, B = map(lambda x: int(x) - 1, data[index:index + 4])
        index += 4

        # 取り除いたトランプの値を確認
        if cards[a][b] == cards[A][B]:
            # 同じ値のトランプを取り除く
            removed_counts[current_player] += 2
            cards[a][b] = -1  # -1 は取り除かれたことを示す
            cards[A][B] = -1
        else:
            # 異なる値のトランプの場合は次のプレイヤーに移る
            current_player = (current_player + 1) % N

    # 各プレイヤーの取り除いたトランプの枚数を出力
    for count in removed_counts:
        print(count)

if __name__ == "__main__":
    main()

コードの説明:

  1. 入力値の読み込み:

    import sys
    input = sys.stdin.read
    
  2. main 関数:

    def main():
        data = input().strip().split()
        index = 0
        H = int(data[index])
        W = int(data[index + 1])
        N = int(data[index + 2])
        index += 3
    
        cards = []
        for i in range(H):
            row = []
            for j in range(W):
                row.append(int(data[index]))
                index += 1
            cards.append(row)
    
        L = int(data[index])
        index += 1
    
        removed_counts = [0] * N
        current_player = 0
        for _ in range(L):
            a, b, A, B = map(lambda x: int(x) - 1, data[index:index + 4])
            index += 4
            if cards[a][b] == cards[A][B]:
                removed_counts[current_player] += 2
                cards[a][b] = -1
                cards[A][B] = -1
            else:
                current_player = (current_player + 1) % N
    
        for count in removed_counts:
            print(count)
    

実行方法:
このプログラムは、標準入力からのデータを処理し、各プレイヤーが取り除いたトランプの枚数を標準出力に出力します。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?