2

だから、次のエクストリーム・コンペティションに向けて自分自身を準備するために、私はいくつかの過去の問題を経験していました.何をすべきか理解できないので、私は本当に私を悩ませている問題を見つけました.おそらく、300行のブルートフォースコードを使用してそれを作ることができます.これは、そのような大会で誰かがすべきことではないと思うので、あなたの助けが必要です!!

ビットマップ内の形状の検出

問題文: 画像分析では、ビットマップを分析し、そこに存在する形状を観察するのが一般的です。この問題では、特定のビットマップ内の形状を検出するアルゴリズムを設計してください。マップに存在する形状は、正方形、長方形、三角形、および平行四辺形のセットからのものでなければなりません。

ビットマップでは、各ピクセルはビットとして表されます。1 は黒を表し、0 は白を表します。参加者は、黒で概説された形を検出することが期待されています。入力 最初の行には、(Row,Column) として表されるピクセル単位のビットマップのサイズが含まれます。

たとえば 6,8 は、6 行 8 列のビットマップを意味します。次の行には、スペースで区切られた 0 から 255 までの一連の 10 進数が含まれます。各桁は、ビットマップ内の 8 つのバイナリ ビットのコレクションを表します。すなわち。55 はバイナリ パターン 00110111 を表します。

注: ビットマップには複数の形状が存在する可能性があり、交差する形状はありません。ただし、交差することなく互いにネストされた形状が存在する可能性があります。

出力 ビットマップに存在する形状を名前の昇順にカンマとスペースで区切ります。例えば。長方形、正方形、三角形

注: 出力の最後に改行やスペースはありません。形状が繰り返される場合、出力にはビットマップと同じ数の繰り返しが含まれている必要があります。すなわち。2 つの正方形と 1 つの三角形がある場合、出力は Square、Square、Triangle になります。

例セット 1

入力:

6 8

0 126 66 66 126 0

出力: 長方形

例セット 2

入力:

6 16

0 0 120 120 72 144 73 32 123 192 0 0

出力: 平行四辺形、正方形

ビットマップを視覚化し、2 つのリスト (行と列のビットマップ) を持つことができるように、このコードを作成しました...

rows,cols=(int(i) for i in raw_input().split())
nums=[int(n) for n in raw_input().split()]
mr=[]
for i in range(0,len(nums),cols/8):
    row=''
    for j in range(i,i+cols/8):
        b=bin(nums[j])[2:]
        b='0'*(8-len(b))+b
        row+=b
    mr.append(row)
mc=[''.join([mr[i][j] for i in range(rows)]) for j in range(cols)]

お時間をいただきありがとうございます...Python、C++、またはRubyでできるかどうか答えてください。これらは私が理解できる言語であり、アルゴリズム的にも...

4

1 に答える 1