大富豪メニューのサムネイル
(問題 8)大富豪プレイ Ruby編(paizaランク B 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

(はじめに)

実際に大富豪をプレイしてみます。ルールは8切り、イレブンバック、S3のみ考慮します。順位も単純に最初にカードを無くした人が 1 位、次に無くなった人が 2 位、...、最後までカードが残った人が最下位とします。

実際は複数の人で遊ぶゲームですが、ここでは N 人のシミュレーションを行っていきます。つまり、N 人の手札をもとに正しく大富豪で遊ぶプログラムを作ってください。

では、実際にやってみましょう。

(問題)

N 人の手札が与えられます。プレイヤー i (1 ≦ i ≦ N) の手札は A_i 枚で、T_i_1, T_i_2, ..., T_i_{A_i} です。D3を持っているプレイヤーからゲームを開始します。プレイヤー k がカードを出すかパスするかによりターンを終了したら、次はプレイヤー k + 1 がターンを開始します。ただし、プレイヤー N + 1 はプレイヤー 1 のことを指すものとします。全員の順位が決まるまで(手札が残っているプレイヤーが 1 人になるまで)大富豪で遊んでください。ただし、それぞれのプレイヤーにおいて場に出すことが出来るカードが 1 枚でもある場合にはパスすることはできないものとします。

入力される値


N
A_1
T_1_1 T_1_2 ... T_1_{A_1}
A_2
T_2_1 T_2_2 ... T_2_{A_2}
...
A_N
T_N_1 T_N_2 ... T_N_{A_N}


1 行目には 1 つの整数 N が与えられます。

2 × i (1 ≦ i ≦ N) 行目には 1 つの整数 A_i が与えられます。

2 × i + 1 (1 ≦ i ≦ N) 行目には A_i 個の文字列 T_i_1, T_i_2, ..., T_i_{A_i} が与えられます。

入力は 2 × N + 1 行となり、末尾に改行が 1 つ入ります。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

順位が決まるまでにかかったターン数を q としたとき q + 2 行で出力してください。

i (1 ≦ i ≦ q) 行目では、カードを場に出したプレイヤー番号と出したカードを空白区切りで出力してください。

q + 1 行目には 0 0 と出力してください。

q + 2 行目にはプレイ結果の順位を 1 位のプレイヤーから順に空白区切りで出力してください。

1 ターン目で出されているカードがD3であり、場に出せるのにパスしたプレイヤーがいない状態であり、場に出せないカードを出したプレイヤーもいない状態であり、手札が残っているプレイヤーが 1 人になったらプレイが終了し、なおかつ実際にプレイした順位と一致する場合にのみ正解と判定されます。

同じカードを 2 回使うことが出来ない点に注意してください。

条件

すべてのテストケースにおいて、以下の条件をみたします。

  • 2 ≦ N ≦ 10


  • A_1 + A_2 + ... + A_N = 54


  • A_1 ≧ A_2 ≧ ... ≧ A_N


  • A_1 - A_N ≦ 1


  • T_i_j (1 ≦ i ≦ N, 1 ≦ j ≦ A_i) はトランプのカードで同じカードは現れない
  • 入力例1

    4
    14
    C8 S6 H2 HA C4 H6 C7 D5 SJ S2 S5 D10 S7 S9
    14
    D7 S4 HK DQ H5 D3 S8 D4 HQ S3 C3 C5 DA H7
    13
    D2 D9 SA BJOKER D8 CJ H8 C9 DK HJ SK H3 S10
    13
    C2 CQ C6 H9 SQ CA D6 C10 H10 H4 CK DJ RJOKER

    出力例1

    2 D3
    3 H8
    3 DK
    4 RJOKER
    2 S3
    2 H7
    3 SA
    4 C2
    3 BJOKER
    3 C9
    4 CA
    1 S2
    1 H6
    2 DQ
    3 D2
    3 SK
    1 H2
    1 S7
    2 DA
    2 S8
    2 D4
    3 D8
    3 CJ
    4 C6
    1 C4
    2 C3
    2 HK
    1 HA
    1 S6
    2 D7
    3 S10
    4 CK
    4 H4
    1 SJ
    2 S4
    3 H3
    3 HJ
    4 C10
    1 C8
    1 S5
    2 HQ
    2 C5
    3 D9
    4 SQ
    4 D6
    1 D10
    4 CQ
    4 H9
    4 H10
    4 DJ
    1 S9
    2 H5
    0 0
    3 4 2 1

    入力例2

    8
    7
    C4 HJ S8 D8 CJ S5 S3
    7
    H10 C8 H5 H7 D7 H9 S4
    7
    D9 HA H2 DK D5 D4 S10
    7
    S7 S9 DA SJ SK H3 H8
    7
    CA D3 C9 HQ S2 C6 D6
    7
    D10 SA CK RJOKER D2 C3 BJOKER
    6
    SQ C5 DJ S6 C2 C7
    6
    H4 CQ C10 DQ H6 HK

    出力例2

    5 D3
    6 SA
    7 C2
    6 BJOKER
    1 S3
    1 S5
    2 D7
    3 H2
    6 RJOKER
    6 C3
    7 S6
    8 C10
    1 HJ
    2 H7
    3 D5
    4 H3
    4 S7
    5 C9
    6 D10
    7 DJ
    8 H6
    1 C4
    1 S8
    1 CJ
    2 C8
    2 H10
    3 HA
    5 S2
    5 CA
    6 D2
    6 CK
    4 DA
    4 SK
    4 H8
    4 SJ
    5 C6
    7 C5
    8 H4
    8 DQ
    3 DK
    3 S10
    5 HQ
    8 HK
    8 CQ
    1 D8
    2 S4
    3 D9
    7 SQ
    7 C7
    2 H9
    2 H5
    4 S9
    5 D6
    0 0
    6 8 1 7 2 4 5 3

    問題一覧へ戻る

    1. paizaラーニングトップ
    2. レベルアップ問題集
    3. 大富豪メニュー(言語選択)
    4. 問題一覧 Ruby編
    5. (問題 8)大富豪プレイ Ruby編
    ページの先頭へ戻る