关于在棋盘上移动主教的Python问题[关闭]

问题描述 投票:0回答:0

这就是问题所在 问题

def reach_corner(x, y, n, m, aliens):

一个孤独的国际象棋主教发现自己站在一个奇怪的 n×m 棋盘的正方形 (x,y) 上 漂浮在外层空间,上面覆盖着完全没有摩擦力的魔冰。 (真实故事。是的,还有
再次,从零开始索引。)这个板不一定是正方形,但可以是
的任何矩形 整数维度。电路板四周环绕着类似于空气的弹性壁
曲棍球桌。棋盘上的一些方块是外星人,他们的大嘴巴和小嘴巴
嘴让任何进入的人都玩完游戏。

快速刀法对这里的主教没有帮助。相反,他必须到达四个
中的任何一个 板的四个角可能的出口。类似于耐心看an
的屏保 老式 DVD 播放器,象必须一次到达这些角中的任何一个。主教可以 最初将自己推向四个对角线方向中的任何一个。在这最初的冲动让他 继续前进,主教在无摩擦的冰面上无法再控制自己的动作,而是会一直滑下去 朝向当前方向矢量的任何一端并从墙上弹跳带他。甚至
主教有可能永远重复相同的方块循环。 (你的函数,不知不觉
在计算机状态配置的复杂得多的表面上进行这种舞蹈,不应该
效仿,但从轨道上核对整个计算,只是为了确定。)

这个函数应该判断是否存在至少一个引导方向的起始方向
主教到四个角落中任何一个的安全,避开沿途的所有外星人。

预期结果

0 2 5 5 [] False 

4 4 9 9 [(0, 0), (0, 8), (8, 0), (8, 8)] False 

1 1 1000 2 [(0, 0), (0, 1), (999, 0)] True 

1 1 1000 2 [(0, 0), (0, 1), (999, 1)] False 

3 2 4 4 [(1, 2), (0, 1)] False 

3 2 5 4 [(2, 2), (1, 4)] True 

这是我的代码,无法为以下测试用例返回正确的输出。

def reach_corner(x, y, n, m, aliens):
    direction = [-1, 1]
    safe_corner = [(0, 0), (n-1, 0), (0, m-1), (n-1, m-1)]
    for i in direction:
        for j in direction:
            current_i = x
            current_j = y
            while True:
                current_i += i
                current_j += j
                if (current_i, current_j) in aliens:
                    break
                if (current_i, current_j) in safe_corner:
                    return True
                if current_i < 0 or current_i == n or current_j < 0 or current_j == m:
                    break
    return False
ARGUMENTS: 1, 1, 1000, 2, [(0, 0), (0, 1), (999, 0)]
EXPECTED: True
RETURNED: False

ARGUMENTS: 1, 8, 4, 9, [(2, 8)]
EXPECTED: True
RETURNED: False

ARGUMENTS: 0, 8, 4, 9, [(2, 8), (1, 5)]
EXPECTED: True
RETURNED: False
python arrays chess challenge-response
© www.soinside.com 2019 - 2024. All rights reserved.