我正在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 .我不明白哪里出了问题.我的错误是什么?

推荐答案

问题是您使用current_village来确定动作的位置和插入点,而不管所涉及的pioneer的位置是什么.相反,你需要与当前先驱所在的村庄合作.对于每个开拓者来说,这不一定是同一个村庄,所以与一个current_village人一起工作是不会正常工作的.

代码中的另一个问题是,position属性没有被初始化为您在开始时创建的虚拟村庄.

以下是我将如何更正您的代码:

class Village:
    def __init__(self, owner=None):
        self.owner = owner
        self.next = None
    
class Pioneer:
    def __init__(self, id, position):
        self.id = id              # distinquish id and position
        self.position = position  # initialise with argument

def main():
    k, n = map(int, input().split())

    starting_village = Village()
    num_villages = 0  # Instead of a list of villages, just track a count of them

    # Initialise the pioneers to be at the starting village
    pioneers = [Pioneer(i, starting_village) for i in range(k)]

    for i in range(n):
        pioneerstr, action = input().split()
        pioneer = pioneers[int(pioneerstr)]  # Get the pioneer instance

        # Use the village where the selected pioneer is at
        if action == "move":
            if pioneer.position.next is not None:
                pioneer.position = pioneer.position.next

        elif action == "build":
            new_village = Village(owner=pioneer)
            new_village.next = pioneer.position.next
            pioneer.position.next = new_village
            pioneer.position = new_village
            num_villages += 1

    print(num_villages)

    current_village = starting_village.next
    while current_village is not None:
        print(current_village.owner.id)
        current_village = current_village.next

        
if __name__ == "__main__":
    main()

Python相关问答推荐

Gekko解算器错误results.json未找到,无法找出原因

Tokenizer Docker:无法为Tokenizer构建轮子,这是安装pyproject.toml项目所需的

Plotly:如何更改Heatmap中彩色条的勾选文本

Pandas 填充条件是另一列

在内部列表上滚动窗口

max_of_three使用First_select、second_select、

Python上的Instagram API:缺少client_id参数"

海运图:调整行和列标签

将pandas Dataframe转换为3D numpy矩阵

OR—Tools CP SAT条件约束

优化器的运行顺序影响PyTorch中的预测

在含噪声的3D点网格中识别4连通点模式

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

Django RawSQL注释字段

调用decorator返回原始函数的输出

如何启动下载并在不击中磁盘的情况下呈现响应?

如何指定列数据类型

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

Flask Jinja2如果语句总是计算为false&

如何创建引用列表并分配值的Systemrame列