来自代码战的catchheeggs挑战:你能帮我找到我的错误吗?

2024-09-28 01:31:35 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个来自CodeFights的问题,但总的前提是:你刚刚在一家设计糟糕的鸡蛋工厂找到了一份捕蛋工的工作。 鸡都在工厂的一边排成一排。 每只鸡的下面都有一条传送带,传送掉的鸡蛋你。如果你在传送带的尽头,当鸡蛋到达时,你抓住了它。如果不,鸡蛋掉在地上,你抓不到它。你知道吗

在“转弯”过程中,鸡蛋沿传送带1位置装置向下移动。 你可以向左移动一个位置,向右移动一个位置,或者呆在原地。给出输入。返回在轮班期间可能捕获的最大卵数。你知道吗


为了澄清问题,输送机长度只是指您的起始位置。因此,如果有5只鸡,cL=3,那么你只能在第一轮中从传送带2、3、4抓到鸡蛋,因为你可以在一个增量中保持不动或向任何一个方向移动。这个问题有点棘手,因为你必须找到最好的结果,而且工人可以通过多种途径捕获所有的卵。你知道吗

-例如:catchTheEggs(3,1,[[1,3],[2],[3]])=3

-第1轮:这里n=3,cL=1,所以在第一轮中,输送器1和3的鸡蛋掉落[1,3],你现在站在cL=1,所以你抓住了鸡蛋1,鸡蛋3掉落。你知道吗

-第2轮:cL=1,因为您决定在上一轮中不移动。这一次只有鸡蛋2滴,所以你移动到cL=2来捕捉它。你知道吗

-第三轮:cL=2,因为你是为了从第二轮抓到鸡蛋而移动的。这一次,鸡蛋从传送带3下降,所以你采取行动,以赶上它。你知道吗

你总共抓了3个蛋。你知道吗

def catchTheEggs(numberOfChickens, conveyorLength, eggs):
# i changed the name of the variables for convenience sake
n = numberOfChickens
cL = conveyorLength
catch = 0

for i in range(0, len(eggs)):

    for j in range(0, len(eggs[i])):
        # is it possible to catch the egg
        if ((eggs[i][j] + 1) == cL) or ((eggs[i][j] - 1) == cL) or (eggs[i][j] == cL):
            cL = eggs[i][j]
            catch += 1
        # say you are at cL=1, and eggs from conveyor 4 drop 4 times: 
        # [[4],[4],[4],[4]] then you should move to conveyor 2, then 3
        # and for the last 2 rounds you can catch them. 
        # so I'm accounting for a scenario like that.   
        elif (abs(len(eggs)) >= n):
            cL += 1

return catch

我无法完成此测试用例:

catchTheEggs(4,2,[[1,4],[1,2,4],[1,3],[2],[1,2,4],[2,3],[3],[2],[1,3,4],[3,4],[1]])

应该是10,但我的代码是14。你知道吗


Tags: theinyouforlencl工厂range
1条回答
网友
1楼 · 发布于 2024-09-28 01:31:35

你的问题是,多个鸡蛋可以在一轮捕获。你知道吗

您的第一个“if”语句将允许鸡蛋捕捉器捕捉到一个鸡蛋,如果他们是一个正方形的距离。然而,没有条件阻止捕蛋者在捕捉到第一个蛋后再捕捉另一个蛋。你知道吗


示例:

如果eggs[i]=[2,3]和cL=2,则“j”for循环将迭代两次(作为len(eggs[i])=2)。你知道吗

在第二次迭代中,[i][0]=2将被考虑,并且当cL=2时,卵将被捕获。catch在这里也会增加,cL将保持2。你知道吗

在第二次迭代中,[i][1]等于3,当cL=2时,卵也会被捕获。你知道吗


因此,一些值将导致cL增加两倍,例如[1,2,4](位置1和位置2的卵都被捕获)。这是输出14而不是10的原因。你知道吗

为了纠正这种情况,您需要插入一个break语句,或者另一个布尔变量,它可以防止每轮有一个以上的移动进入“j”for循环。你知道吗

相关问题 更多 >

    热门问题