[伯俊]2578 Bingo python


ビンゴ


質問する


ビンゴゲームは以下のように行われます.
まず,次のような25格子からなるBingo板において,1〜25の間で,格子ごとに1個の自然数を用いた.

次は司会者の呼び方を順番に消します.例えば、5、10、7が呼ばれると、この洗顔を拭いてから、ビンゴ板の様子は以下の通りです.

数値を順次削除し、同じ横線、縦線、または対角線の5つの数値を削除すると、その行に線が引かれます.

これらの線が3本以上破られた瞬間、「ビンゴ」を叫び、最初に叫んだ人がゲームの勝者になる.

チョルスは友達とビンゴゲームをしている.チョルスがビンゴー版に書いた数と司会者が呼んだ数の順番を示すときは、司会者が何番目に呼んだかを出力するプログラムを作成してください.チョルスは「ビンゴー」と呼ぶことができますか.

入力


1行目から5行目まで、ビンゴ版に書かれた数字は一番上の横線から順に1行の間に5つのスペースを残します.6行目から10行目まで、司会者の呼び出し数は行ごとに5つのスペースの順だった.Bingoボードに書かれた数字と司会者が歌う数字はそれぞれ1~25の数字を使います.

しゅつりょく


1行目で司会者が何曲目を歌った後、チョルスが「ビンゴ」と叫ぶかどうかを出力した.

解決策

  • ビンゴ版を受け取った後、ビンゴになった12種類の状況を事前に知る.
  • 横冷蔵庫、縦冷蔵庫(マトリクス変換後横考慮)、対角線冷蔵庫
  • の数字とBingoボードの周りを回転し、数字が発表されるとBingoボードから数字を削除します.
  • Bingoボードが空のリストになっている場合は、cntを1、cntを3にアップロードして終了します.
  • 
    bingo1 = [list(map(int,input().split()))for i in range(5)] #빙고판 불러오기 (가로 빙고 5개 )
    bingo2 = list(map(list,zip(*bingo1)))   #빙고판 행렬전환 (세로 빙고 5개)
    
    bingo3 = [];bingo4 = []
    for i in range(len(bingo1)) :
        bingo3.append(bingo1[i][i]) #빙고 왼쪽 대각선
        bingo4.append(bingo2[i][4-i]) #빙고 오른쪽 대각선 
    bingo = bingo1+bingo2
    bingo.append(bingo3)
    bingo.append(bingo4) #빙고가 되는 경우의 수 12가지 만들기 
    
    lst = []
    for i in range(5) :
        lst += list(map(int,input().split())) #숫자 불러오기 
    n = 0
    for i in lst :
        n +=1
        cnt = 0
        for j in bingo :
            if i in j :
                j.remove(i) #숫자가 선언되면 빙고 경우의 수 리스트에서 수를 지우기 
            if j == [] : #빈 리스트이면 cnt + 1
                cnt +=1
        if cnt >= 3: #빙고가 세개이면 종료 
            break
    print(n)