我正在try 解决以下代码挑战:
挑战说明
有一个给定的数字pioneers谁可以建立villages.这些村庄建在一条直线上,从左到右将有一定的顺序.一开始,这里没有村庄.一旦拓荒者建造了一个村庄,那个村庄就永远是他们的财产,拓荒者将一直盯着那个村庄,直到他们搬到另一个村庄.
输入定义了一系列操作,每个操作指定一个先行者(由其从0开始的索引标识)和该先行者的action:
-
行动"建设":给定的拓荒者在他们目前居住的地方的右边建造一个新村庄,或者如果拓荒者还没有居住地,它将成为最左边的村庄.如果在开拓者住所的右边已经有一个村庄,那么新的村庄将被插入到开拓者现在的住所和下一个村庄之间.
此次行动后,新村成为建筑拓荒者的居所.
-
行动"搬家":给定的开拓者简单地将他们的住所搬到下一个村庄.如果没有下一个村庄,开拓者就会留在现在的地方.
该程序必须按照从左到右的顺序输出已建成村庄的所有者,并考虑到输入中指定的所有操作.
输入格式
第一行有两个用空格隔开的数字:先驱人数和行动人数
每个动作输入有一行,两部分用空格隔开:拓荒者编号和动作类型("建立"或"移动")
输出格式
输出中的第一行必须给出村庄的数量
对于每个村庄(按照其正确的顺序),输出应该与拥有相应村庄的开拓者的索引分开.
示例
输入:
2 4
0 build
1 build
1 move
1 build
预期输出:
3
1
0
1
该示例有两个先行者(0和1).先锋0创建了第一个村庄.先锋1创建一个村庄,该村庄插入到该村庄的左侧,然后移动到另一个村庄.最后,拓荒者1在该村庄的右边创建了一个村庄.
我的方法
我对村庄使用了链表数据 struct .
以下是我的代码:
class Village:
def __init__(self, owner=None):
self.owner = owner
self.next = None
class Pioneer:
def __init__(self, position):
self.position = None
def main():
k, n = map(int, input().split())
pioneers = [Pioneer(i) for i in range(k)]
starting_village = Village()
current_village = starting_village
villages = [starting_village]
for i in range(n):
pioneer, action = map(str, input().split())
if action == "move":
if current_village.next is not None:
current_village = current_village.next
pioneers[int(pioneer)].position = current_village
elif action == "build":
new_village = Village(owner=pioneer)
if current_village.next is not None:
new_village.next = current_village.next
current_village.next = new_village
pioneers[int(pioneer)].position = new_village
villages.append(new_village)
m = len(villages) - 1
print(m)
current_village = starting_village.next
while current_village is not None:
print(current_village.owner)
current_village = current_village.next
if __name__ == "__main__":
main()
问题
对于示例输入我的代码输出:
3 1 1 0
...这显然不是预期的yields .我不明白哪里出了问题.我的错误是什么?