在此嵌套列表情况下嵌套值之间进行比较的正确方法是什么?



在我们的工程师周,我的学校提出了代码挑战。您不允许使用解决大部分问题的库。这是我的问题。

[>][ ][<]
[ ][^][ ]
[ ][<][ ]

给出了任何规模的ASCII艺术,任何数量的飞机都以任何步骤来解析文本文件并执行三件事。

1)给定步骤找出哪个平面将互相坠毁,用'x'

标记飞机

2)一个步骤,找出哪个飞机会从网格上飞出而不会互相撞向彼此,然后用" O"使其。例如,[ ][ ][<]将飞行给定的步骤3。

3)给定步骤,如果飞机不飞出网格,并且不会崩溃,则在下一个着陆点

我写了一些可以将上述文本文件转变为嵌套列表的东西,并抓住其当前和未来的坐标。

我目前正在处理一个名为updating_airfield的函数,我可以用'x'或'o'标记飞机或将它们移至另一个位置。难题的这个逻辑部分正在杀死我。以下是基于上述ASCII机场的我的Update_airField函数的输入,给定的步长为2。

# ROW 1 [>][ ][<] or ('>', 0, 0)(' ', 0, 1)('<', 0, 2)
# AFTER adding the step and formatting the output
[('>', 2), ('<', 0)]
# I took the 2nd element because its blank and I also removed the x_axis 
# because we only need to go along the horizontal line. 

我可以做的下一步是在编号位置值之间进行数学比较。如果结果为> = 0,那么我知道他们要么两个地点都落在同一地点,要么彼此之间,所以他们坠毁了。然后我可以更改'>'和'&lt;'到" X",最后重复每行。该逻辑应该可以工作,但如果我使行更长并添加更多飞机,则会断开。

这是我被困在任何给定步骤中以任何数量的飞机弥补任何规模的机场的地方。那么,您甚至如何开始解决这样的问题呢?标准Python中是否有数据结构可以帮助我跟踪哪个飞机会彼此崩溃?我也必须为沿垂直方向上下行驶的飞机做同样的事情。我正在考虑用有序的词典绘制所有内容,但不确定如何进行。任何帮助是极大的赞赏。我希望我能够清楚自己。

您实际上不必比较数组。除非您有大量的步骤或字段,否则最简单的方法是通过播放说明来模拟每个步骤。顺便说一句,哪个符号表示为?

Initial state
[>][ ][<]
[ ][^][ ]
[ ][<][ ]
Step +1
[ ][X][ ]
[ ][ ][ ]
[<][ ][ ]
Step +2
[ ][X][ ]
[ ][ ][ ]
[L][ ][ ]

等等。您必须小心一点,不要在一步中移动同一平面。为了避免这种情况并保持事物相对简单,您可以创建一个结构以保持飞机状态,以及一个数组来保留位置以检查碰撞(这只是优化)。

我会选择伪代码。

您的平面类可以包含:

 originalX; 
 originalY;
 currentX; 
 currentY;
 state # on the field, left, collided
 stepNoLeft;
 stepNoCollided;
 ListcollidedWith  - optional

将飞机放入列表中,将用作队列。创建一个2维数组以保持当前位置(只是回头看您已经与之相撞的飞机)。如果该字段真的很稀疏(成千上万的单元格和几个飞机,您可能会考虑一个不同的结构。可能是列表或多图的地图,在这种情况下,您将拥有的唯一数组将是飞机的列表,与他们相撞的人。因此,该字段可能是键是x/y位置的多图(列表映射)。让我们使用多套件,因为这将是更通用的。

清洁现场图(下一步)迭代飞机列表,并将飞机放在地图中的"田地"上。对于第一步,您不应有协调碰撞。如果飞机碰撞可能不应移动或飞走。您可以跳过已经飞走的平原(它们不会更改方向,因此一旦离开了田野,它们就可以安全。请注意,以下情况可能有效:飞机在一个文件中相互关注:

step 0 [ ][<][<][ ]
step 1 [<][<][ ][ ]

更新当前X,y,然后将其放入多图像中,或者将其从现场标志中删除为外场。(您可以在此时检查目标单元格,但可以等待步骤的结束)在台阶的末尾,迭代地图上的地图,并用多个飞机挂起碰撞的旗帜。

冲洗并重复

示例:

 For the Initial state
[>][ ][<]
[ ][^][ ]
[ ][<][ ]

看起来像这样:

tuple: (x,y,direction,id)
step 0: airplanes( (0,0,'>', 'A') , (0,2,'<', 'B') , (1,1,'^', 'C') ,(2,1,'<', 'D')
step 1: airplanes( (0,1,'>', 'A') , (0,1,'<', 'B') , (0,1,'^', 'C') ,(2,0,'<', 'D')
map step1:
key: 0-1 : A,B,C – collided at step1
key:2-0: D

步骤2:飞机((0,1,'>','a'),(0,1,'&'&'&','b'),(0,1,'^','c'),(2,-1,'&lt;','d')

airplanse A,B,C don't move  (let's assume that once there was a collision they don't move)
airplane D – has left the field
map step1:
key: 0-1 : A,B,C – collided at step1
 D is not in the map

由于Python有不错的内置列表和地图,因此您不需要任何库。

最新更新