因此,我们之前提交的任务是尝试在给定文件的情况下以尽可能少的移动生成图片。例如,文件将包含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个。