どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

Rock, Paper, Scissors

 

じゃんけん

Rock, Paper, Scissors | Aizu Online Judge

解き方

5人のじゃんけんの手を入力順にリストに入れる。今回は勝敗の出力は引き分けと勝ち負けの2通りに分けて考えています。

はじめにじゃんけんの結果が引き分けの場合を考える。引き分けだとじゃんけんの手がグー、チョキ、パー3つの手が出ている場合か5人の手がすべて同じ場合の2通りになる。set()を使って重複している手をなくしてから長さを見て引き分けか判断する。長さが3の場合グー、チョキ、パーが出ていて、1の場合は5人の手がすべて同じであることを意味する。その場合引き分けを表す3を出力し次の入力を受け取りにいく。

引き分けでない場合リストからひとつずつじゃんけんの手を取り出し、その手が勝ちか負けかを判定して結果を出力していく。

ソースコード

while True:
    h1 = int(input())
    if h1 == 0:
        break
    h = [h1] + [int(input()) for _ in range(4)]
    if len(set(h)) == 1 or len(set(h)) == 3:
        print(*[3]*5, sep="\n")
        continue
    for hi in h:
        print([2, 1][(hi%3)+1 in h])

コードの補足

ちなみに、この部分は

    for hi in h:
        print([2, 1][(hi%3)+1 in h])

 

下の3つの条件文をひとつにしたものです。

    for hi in h:
        if hi == 1:
            print(1 if 2 in h else 2)
        elif hi == 2:
            print(1 if 3 in h else 2)
        else:
            print(1 if 1 in h else 2)