这就是问题所在 问题
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