0
0

More than 1 year has passed since last update.

AOJトライに関する知識知見の記録共有(Volume0-0036)

Last updated at Posted at 2021-10-08

概要

A Figure on Surface

コード

itertoolsを使用

import itertools

def matched(area, ptn):
    #print(area)
    ret = False
    if ptn == 0:
        if len(area) >= 2 and len(area[0]) >= 2 and area[0][0] == "1" and area[0][1] == "1" and area[1][0] == "1" and area[1][1] == "1":
            ret = True
    elif ptn == 1:
        if len(area) >= 4 and len(area[0]) >= 1 and area[0][0] == "1" and area[1][0] == "1" and area[2][0] == "1" and area[3][0] == "1":
            ret = True
    elif ptn == 2:
        if len(area) >= 0 and len(area[0]) >= 4 and area[0][0] == "1" and area[0][1] == "1" and area[0][2] == "1" and area[0][3] == "1":
            ret = True
    elif ptn == 3:
        if len(area) >= 3 and len(area[0]) >= 2 and area[1][0] == "1" and area[2][0] == "1" and area[0][1] == "1" and area[0][2] == "1":
            ret = True
    elif ptn == 4:
        if len(area) >= 2 and len(area[0]) >= 3 and area[0][0] == "1" and area[0][1] == "1" and area[1][1] == "1" and area[1][2] == "1":
            ret = True
    elif ptn == 5:
        if len(area) >= 3 and len(area[0]) >= 2 and area[0][0] == "1" and area[1][0] == "1" and area[1][1] == "1" and area[2][1] == "1":
            ret = True
    elif ptn == 6:
        if len(area) >= 2 and len(area[0]) >= 3 and area[0][1] == "1" and area[1][0] == "1" and area[1][1] == "1" and area[2][1] == "1":
            ret = True
    return ret

def A_Figure_on_Surface(area):
    ret = []
    for x, y, ptn in itertools.product(range(len(area)), range(len(area[0])), range(7+1)):
        if matched([[area[i][j] for j in range(y, len(area[0]))] for i in range(x, len(area))], ptn):
            ret.append([x, y, ptn])
            break
    return ret

def hoge(*args):
    ret = []
    for arg in args:
        print(arg)
        ret.append(A_Figure_on_Surface(arg))
    return ret

print(hoge(
["00000000",
"00000000",
"01100000",
"00110000",
"00000000",
"00000000",
"00000000",
"00000000",
],[
"00011110",
"00000000",
"00000000",
"00000000",
"00000000",
"00000000",
"00000000",
"00000000",],
[
"00000000",
"00000000",
"00110000",
"00110000",
"00000000",
"00000000",
"00000000",
"00000000",]
))

実行結果

デバッグログ出力部含む

['00000000', '00000000', '01100000', '00110000', '00000000', '00000000', '00000000', '00000000']
['00011110', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000', '00000000']
['00000000', '00000000', '00110000', '00110000', '00000000', '00000000', '00000000', '00000000']
[[[2, 1, 4]], [[0, 3, 2]], [[2, 2, 0]]]
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0