尽可能少地绘制像素图片

时间:2017-05-17 02:54:48

标签: python matrix artificial-intelligence

因此,我们之前提交的任务是尝试在给定文件的情况下以尽可能少的移动生成图片。例如,文件将包含1和0的矩阵,其中1将被着色,0将被留空。我们将这个矩阵接收到一个名为solution的函数中,并且可以访问我们可以用来绘制图像的3个函数:

paint('line', r1, c1, r2, c2)
  • 绘制从[r1, c1]开始到[r2, c2]
  • 结束的行中的所有像素
  • 包含起点和终点
  • 行只能是垂直或水平

paint('square', r1, c1, size)

  • 绘制从[r1, c1](左上角)开始到[r1 + size - 1, c1 + size - 1](右下角)结束的块中的所有像素

paint('erase', r1, r1)

  • 删除[r1, c1]
  • 处的像素

我想出的解决方案就是这个:

def solution(imat, painter):
    nrows, ncols = imat.shape
    for r in range(nrows):
        line = False
        curr_col = 0
        for c in range(ncols):
            if imat[r, c] == 0:
                continue
            elif c == ncols - 1 and line == True and imat[r, c] == 1:
                painter.paint('line', r, curr_col, r, c)
            elif c == ncols - 1 and line == False and imat[r, c] == 1:
                painter.paint('square', r, c, 1)
            elif line == False and imat[r, c] == 1 and imat[r, c + 1] == 1:
                line = True
                curr_col = c
            elif line == True and imat[r, c] == 1 and imat[r, c + 1] == 1:
                continue
            elif line == True and imat[r, c] == 1 and imat[r, c + 1] == 0:
                painter.paint('line', r, curr_col, r, c)
                line = False
            else:
                painter.paint('square', r, c, 1)

在上面的代码中,painter执行任务,imat是我们收到的矩阵。我很想知道是否有人能想出更好的解决方案并解释一个更好的方法来解决这个问题。

如果有人对此感兴趣,我提出的解决方案会在30个动作中生成下面的图片,同时该类中的最低金额为20个。

An example of a matrix received

The matrix colored in

0 个答案:

没有答案