pandasでpaiza問題(五目並べ:FINAL問題 五目並べ)

スポンサーリンク

pandas練習のため、無理矢理pandasを使ってpaizaの五目並べ問題を解くシリーズです。前回は5×5の二次元データにおいて、斜め方向で連続する値があるか否かを判定しました。今回は最終問題ということで、縦横斜めの全てを判定することになります。

コードは長くなっていますが、中身としては前回までのコードをつなぎ合わせたもので、前回までのコードの動きがわかっていれば簡単に理解できるかと思います。

import pandas as pd

lst_x = []

for i in range(5):
    x = input()
    y = []
    for j in range(5):
        y.append(x[j])

    lst_x.append(y)

df = pd.DataFrame(lst_x)

result = 0

# rows
for i in range(5):
    df_tmp = df.iloc[i]
    df_bool = (df_tmp == 'O')
    if df_bool.sum() == 5:
        print('O')
        result = 1
        break

for i in range(5):
    if result == 1:
        break
    df_tmp = df.iloc[i]
    df_bool = (df_tmp == 'X')
    if df_bool.sum() == 5:
        print('X')
        result = 1
        break

# columns
for i in range(5):
    if result == 1:
        break
    df_tmp = df.iloc[:, i]
    df_bool = (df_tmp == 'O')
    if df_bool.sum() == 5:
        print('O')
        result = 1
        break

for i in range(5):
    if result == 1:
        break
    df_tmp = df.iloc[:, i]
    df_bool = (df_tmp == 'X')
    if df_bool.sum() == 5:
        print('X')
        result = 1
        break

# cross
tmp_num = 0
for i in range(5):
    if result == 1:
        break
    df_tmp = df.iloc[i, i]
    if df_tmp == 'O':
        tmp_num += 1

if tmp_num == 5:
    print('O')
    result = 1

tmp_num = 0
for i in range(5):
    if result == 1:
        break
    df_tmp = df.iloc[4 - i, i]
    if df_tmp == 'O':
        tmp_num += 1

if tmp_num == 5:
    print('O')
    result = 1

tmp_num = 0
for i in range(5):
    if result == 1:
        break
    df_tmp = df.iloc[i, i]
    if df_tmp == 'X':
        tmp_num += 1

if tmp_num == 5:
    print('X')
    result = 1

tmp_num = 0
for i in range(5):
    if result == 1:
        break
    df_tmp = df.iloc[4 - i, i]
    if df_tmp == 'X':
        tmp_num += 1

if tmp_num == 5:
    print('X')
    result = 1

# result
if result == 0:
    print('D')

コードは100点を取ったものです。私自身が初心者ということもあり、下手な説明で誤解を招くことを避けるため、説明は最小限にしてサンプルコードのみを掲載しています。ただ、コメントでご質問をいただければ、分かる範囲でお答えします。

五目並べのシリーズは今回で終わりです。また何か適当な問題が見つかれば記事にしたいと思います。

コメント

当ブログのコンテンツが気に入ったら広告ブロックの解除(ホワイトリスト化)をご検討下さい。

Please disable your adblocker or whitelist this site!

タイトルとURLをコピーしました