Exemple #1
0
 def test_solve_2(self):
     rows = [[1], [4, 3], [3, 5], [2, 2, 5], [3, 3, 7], [8, 7], [6, 6],
             [6, 6], [5, 5], [11], [7], [9], [10], [10], [10], [7], [14],
             [14], [14], [12]]
     cols = [[3], [3], [2], [3, 3], [5, 4], [1, 6, 3, 4], [10, 9], [3, 15],
             [2, 14], [11], [11], [3, 11], [16], [11, 4], [6, 4, 4], [8, 4],
             [8, 3], [5], [4], [2]]
     expected = np.array([
         [O, O, O, O, O, O, X, O, O, O, O, O, O, O, O, O, O, O, O, O],
         [O, O, O, O, O, X, X, X, X, O, O, O, O, O, O, O, X, X, X, O],
         [O, O, O, O, O, O, X, X, X, O, O, O, O, O, O, X, X, X, X, X],
         [X, X, O, O, O, O, X, X, O, O, O, O, O, O, O, X, X, X, X, X],
         [X, X, X, O, X, X, X, O, O, O, O, O, X, X, X, X, X, X, X, O],
         [X, X, X, X, X, X, X, X, O, O, O, X, X, X, X, X, X, X, O, O],
         [O, O, O, X, X, X, X, X, X, O, O, X, X, X, X, X, X, O, O, O],
         [O, O, O, X, X, X, X, X, X, O, O, X, X, X, X, X, X, O, O, O],
         [O, O, O, O, X, X, X, X, X, O, O, O, X, X, X, X, X, O, O, O],
         [O, O, O, O, O, X, X, X, X, X, X, X, X, X, X, X, O, O, O, O],
         [O, O, O, O, O, O, O, X, X, X, X, X, X, X, O, O, O, O, O, O],
         [O, O, O, O, O, O, X, X, X, X, X, X, X, X, X, O, O, O, O, O],
         [O, O, O, O, O, X, X, X, X, X, X, X, X, X, X, O, O, O, O, O],
         [O, O, O, O, O, X, X, X, X, X, X, X, X, X, X, O, O, O, O, O],
         [O, O, O, O, O, X, X, X, X, X, X, X, X, X, X, O, O, O, O, O],
         [O, O, O, O, O, O, X, X, X, X, X, X, X, O, O, O, O, O, O, O],
         [O, O, O, X, X, X, X, X, X, X, X, X, X, X, X, X, X, O, O, O],
         [O, O, O, X, X, X, X, X, X, X, X, X, X, X, X, X, X, O, O, O],
         [O, O, O, X, X, X, X, X, X, X, X, X, X, X, X, X, X, O, O, O],
         [O, O, O, O, X, X, X, X, X, X, X, X, X, X, X, X, O, O, O, O],
     ],
                         dtype=int)
     soln = solve(rows, cols)
     assert_array_equal(soln, expected)
Exemple #2
0
 def test_solve_1(self):
     rows = [[2, 1, 1, 1, 1, 1, 1], [5, 1, 1, 4], [4, 4], [1, 1], [3], [7],
             [6], [3], [1, 3], [2, 4], [3, 8], [13], [12], [12], [15],
             [6, 2, 1], [6, 1, 2, 1], [2, 1, 1, 2, 3, 1, 1],
             [2, 2, 1, 4, 1, 2, 1], [5, 1, 2, 1, 2, 1, 2]]
     cols = [[2, 4], [4, 6], [7, 1], [1, 9], [2, 6, 2], [1, 6], [2, 6, 3],
             [1, 5], [3, 5, 2], [1, 1, 10], [1, 2, 7, 2], [15, 2], [11],
             [15, 3], [1, 2, 1, 2, 1], [1, 2, 4], [3, 2], [1, 3], [2, 1],
             [1, 3]]
     expected = np.array([
         [O, O, O, X, X, O, X, O, X, O, O, X, O, X, O, O, X, O, X, O],
         [O, O, O, O, X, X, X, X, X, O, O, X, O, X, O, O, X, X, X, X],
         [O, O, O, O, O, O, O, O, X, X, X, X, O, X, X, X, X, O, O, O],
         [O, O, O, O, O, O, O, O, O, O, O, X, O, X, O, O, O, O, O, O],
         [O, O, O, O, O, O, O, O, O, O, O, X, X, X, O, O, O, O, O, O],
         [O, O, O, O, O, O, O, O, O, X, X, X, X, X, X, X, O, O, O, O],
         [O, O, O, O, O, O, O, O, O, O, X, X, X, X, X, X, O, O, O, O],
         [O, O, O, O, O, O, O, O, O, O, O, X, X, X, O, O, O, O, O, O],
         [O, X, O, O, O, O, O, O, O, O, O, X, X, X, O, O, O, O, O, O],
         [X, X, O, O, O, O, O, O, O, O, X, X, X, X, O, O, O, O, O, O],
         [X, X, X, O, O, O, X, X, X, X, X, X, X, X, O, O, O, O, O, O],
         [O, X, X, X, X, X, X, X, X, X, X, X, X, X, O, O, O, O, O, O],
         [O, O, X, X, X, X, X, X, X, X, X, X, X, X, O, O, O, O, O, O],
         [O, O, X, X, X, X, X, X, X, X, X, X, X, X, O, O, O, O, O, O],
         [O, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, O, O, O, O],
         [O, X, X, X, X, X, X, O, O, X, X, O, O, O, O, X, O, O, O, O],
         [X, X, X, X, X, X, O, O, O, X, O, O, O, O, X, X, O, X, O, O],
         [X, X, O, X, O, O, X, O, O, X, X, O, O, X, X, X, O, X, O, X],
         [X, X, O, X, X, O, X, O, X, X, X, X, O, X, O, O, X, X, O, X],
         [X, X, X, X, X, O, X, O, X, X, O, X, O, X, X, O, X, O, X, X],
     ],
                         dtype=int)
     soln = solve(rows, cols)
     assert_array_equal(soln, expected)
Exemple #3
0
def web_main(state, rows='', cols='', image=None):
    if not image:
        rows = parse_constraint(rows)
        cols = parse_constraint(cols)
    else:
        ocr = ConstraintsDetector(web_main.ocr_model_path)
        rows, cols = ocr.detect_constraints(image)
        ocr.save_model()
    soln = solve(rows, cols)
    width_px = 500 // soln.shape[1] - 1
    height_px = 500 // soln.shape[0] - 1
    html = [
        '<style type="text/css">', 'table { border-collapse: collapse; }',
        'td { border: 1px solid darkgray;',
        'width: %dpx; height: %dpx; }' % (width_px, height_px),
        '.full { background-color: darkred; }',
        '.empty { background-color: khaki; }', '</style>'
        '<table>'
    ]
    for row in soln:
        html.append('<tr>')
        for x in row:
            if x == FULL:
                html.append('<td class="full"></td>')
            elif x == EMPTY:
                html.append('<td class="empty"></td>')
            else:
                html.append('<td></td>')
        html.append('</tr>')
    html.append('</table>')
    return '\n'.join(html)
Exemple #4
0
def cli_main(rows, cols, pre_parsed=False, animate=False):
    if not pre_parsed:
        rows = parse_constraint(rows)
        cols = parse_constraint(cols)
    if animate:
        return animate_solution(rows, cols)
    soln = solve(rows, cols)
    out = np.full_like(soln, '_', dtype=str)
    out[soln == EMPTY] = ' '
    out[soln == FULL] = 'x'
    for row in out:
        print(*row, sep='')
Exemple #5
0
def main():
    tests = ["10x10", "15x20"]
    for test in tests:
        row_hints, col_hints = parse(os.path.join("test", test + ".txt"))

        solutions = [grid.copy() for grid in solve(row_hints, col_hints)]

        fig = plt.figure()
        ax = plt.gca()

        x = len(col_hints)
        y = len(row_hints)

        ax.set_xticks(np.arange(-.5, x, 5))
        ax.set_yticks(np.arange(-.5, y, 5))

        ax.set_xticks(np.arange(-.5, x, 1), minor=True)
        ax.set_yticks(np.arange(-.5, y, 1), minor=True)

        ax.set_xticklabels([])
        ax.set_yticklabels([])
        ax.tick_params(axis='both', which='both', length=0)

        ax.xaxis.tick_top()

        ax.grid(which='minor', color='k', linestyle='-', linewidth=1.5)
        ax.grid(which='major', color='k', linestyle='-', linewidth=3)

        os.makedirs("out", exist_ok=True)
        os.chdir("out")

        show(solutions[-1])
        plt.savefig(f"solution-{test}.png")

        anim = animation.FuncAnimation(fig, show, frames=solutions)
        anim.save(
            f"solution-{test}.gif",
            progress_callback=lambda i, n: print(f'{test} gif frame {i}/{n}'))
        anim.save(
            f"solution-{test}.html",
            "html",
            progress_callback=lambda i, n: print(f'{test} html frame {i}/{n}'))

        os.chdir("..")
Exemple #6
0
def _do_simple_solve(rows, cols, mat=None):
    return pc.solve(rows, cols, mat)
Exemple #7
0
def test_mat_shape():
    rows = [[], []]
    cols = [[], [], []]
    mat = np.zeros((3, 3))
    with pytest.raises(RuntimeError):
        solver = pc.solve(rows, cols, mat)