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

スポンサーリンク

pandas練習のため、無理矢理pandasを使ってpaizaの五目並べ問題を解くシリーズです。前回は5×5の二次元データにおいて、縦方向で連続する値があるか否かを判定しました。今回「STEP: 5 五目並べ(斜め)」はこれを斜め方向にします。同じく、forループを使ってiloc関数で位置を指定して判定する作業を繰り返します。

前回のコードよりもかなり長くなっています。もっと簡単で要領の良い書き方があるかと思いますが、初心者なりに最低限動くコードが書けたということで公開させていただきます。

OかXが連続で5つ存在すると判定した時点でresultが1になるようにしており、0だった場合は引き分け判定する、というのは前回までと同じです。斜め方向に一個づつ位置をずらしていきながら、値を調べていく動きになっています。読みやすさを捨てればOとXの判定を短くすることも出来るかと思いますが、現段階では読みやすさを優先しました。

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

# 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をコピーしました