Problem:
縦 8、横 8 のマスからなる図 1 のような平面があります。   □| □| □| □| □| □| □| □   ---|---|---|---|---|---|---|---   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □      図１   ---       この平面上に、以下の A から G の図形のどれかが一つだけ置かれています。  | A   ---   ■| ■| |   ---|---|---|---   ■| ■| |   | | |   | | |   | B   ---   | ■| |   ---|---|---|---   | ■| |   | ■| |   | ■| |   | C   ---   ■| ■| ■| ■   ---|---|---|---   | | |   | | |   | | |      | D   ---   | ■| |   ---|---|---|---   ■| ■| |   ■| | |   | | |   | E   ---   ■| ■| |   ---|---|---|---   | ■| ■|   | | |   | | |   | F   ---   ■| | |   ---|---|---|---   ■| ■| |   | ■| |   | | |   | G   ---   | ■| ■|   ---|---|---|---   ■| ■| |   | | |   | | |       たとえば、次の図 2 の例では E の図形が置かれています。   | □| □| □| □| □| □| □| □   ---|---|---|---|---|---|---|---   □| □| □| □| □| □| □| □   □| ■| ■| □| □| □| □| □   □| □| ■| ■| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □   □| □| □| □| □| □| □| □      図２   ---       平面の中で図形が占めているマスを 1、占めていないマスを 0 で表現した数字の列を読み込んで、置かれている図形の種類（A〜G）を出力するプログラムを作成してください。  ただし、ひとつの平面に置かれている図形は必ず１つで、複数の図形が置かれていることはありません。また、A〜G で表される図形以外のものが置かれていることはありません。

Incorrect submission (verdict: Wrong Answer):
# -*- coding: utf-8 -*-
figures = {
    'A': [['1', '1'], ['1', '1']],
    'B': [['1'], ['1'], ['1'], ['1']],
    'C': [['1', '1', '1', '1']],
    'D': [['0', '1'], ['1', '1'], ['1', '0']],
    'E': [['1', '1', '0'], ['0', '1', '1']],
    'F': [['1', '0'], ['1', '1'], ['0', '1']],
    'G': [['0', '1', '1'], ['1', '1', '0']],
}


def iter_input_lines():
    try:
        while True:
            yield [list(input()) for _ in range(8)]
    except EOFError:
        return StopIteration


def f1():
    for lines in iter_input_lines():
        f2(lines)


def f2(lines):
    for n, figure in figures.items():
        found = f3(lines, figure)
        if found:
            print(n)


def f3(lines, figure):
    height = len(figure)
    width = len(figure[0])
    for h in range(0, 8, height):
        for w in range(0, 8, width):
            found = f4(lines, figure, height, width, h, w)
            if found:
                return True
        
        
def f4(lines, figure, height, width, h, w):
    _figure = [[lines[h+_h][w+_w] for _w in range(width)] 
               for _h in range(height)]
    if figure == _figure:
        return True

Fixed, accepted submission:
# -*- coding: utf-8 -*-
figures = {
    'A': [['1', '1'], ['1', '1']],
    'B': [['1'], ['1'], ['1'], ['1']],
    'C': [['1', '1', '1', '1']],
    'D': [['0', '1'], ['1', '1'], ['1', '0']],
    'E': [['1', '1', '0'], ['0', '1', '1']],
    'F': [['1', '0'], ['1', '1'], ['0', '1']],
    'G': [['0', '1', '1'], ['1', '1', '0']],
}


def f1(lines):
    for n, figure in figures.items():
        found = f2(lines, figure)
        if found:
            print(n)
            break


def f2(lines, figure):
    height = len(figure)
    width = len(figure[0])
    for h in range(8 - height + 1):
        for w in range(8 - width + 1):
            found = f3(lines, figure, height, width, h, w)
            if found:
                return True


def f3(lines, figure, height, width, h, w):
    _figure = [[lines[h+_h][w+_w] for _w in range(width)]
               for _h in range(height)]
    if figure == _figure:
        return True


try:
    while True:
        f1([list(input()) for _ in range(8)])
        input()
except EOFError:
    pass