数字挑战
#python #perl #theweeklychallenge

每周挑战210

首先,感谢穆罕默德。上周末是为我们提供每周挑战的四周年。我敢肯定,我为普华永道团队的所有代言都表示,他的不懈的工作非常感谢。

abaoqian1,My solutions

任务1:销毁和胜利

任务

您获得了整数列表。

写一个脚本以获取最大点。您被允许取出(销毁)任何整数并从列表中删除。但是,如果您这样做,那么所有整数恰好一个不到一个或一摩尔的整数也将被删除。找出已删除整数的总数。

我的解决方案

这看起来相对直截了当。我要做的第一件事是通过唯一数字列表进行迭代,从而为此提供了可变的i。在Python中,这是通过将列表转换为集合来完成的。一组 - 从定义上 - 不能具有重复的数字。在perl中,我从列表中使用uniq函数:: util。

对于每次迭代,我得到了i-1i+1之间的所有值的总和。在Python中,我们使用for ... if方法来做到这一点。在Perl中,我们可以使用grep函数。为了计算总和,python具有一个总和函数,而perl使用list :: util。

的函数

一旦计算了此迭代的分数,我将设置score值高于当前值。最后,我将分数打印为输出。

例子

$ ./ch-1.py 2 3 1
6

$ ./ch-1.py 1 1 2 2 2 3
11

任务2:数字碰撞

任务

您将获得一个整数数组,如果负面时,它可以向正确的方向移动,而在负面时向左方向。如果两个数字相撞,则较小的数字将爆炸。如果两者都相同,那么它们都爆炸了。比较时,我们考虑的绝对值。

所有数字以相同的速度移动,因此,任何2个数字沿相同方向移动永远不会碰撞。

写一个脚本以找出谁在碰撞中幸存下来。

我的解决方案

这是我对其他人如何处理它的真正感兴趣的任务之一。我确实考虑了如何在一次通过中执行此操作,但最终得到了可能不是最有效但可能更可读的解决方案。

对于此任务,我有两个循环。当should_continue设置为TRUE时,外循环继续进行。内部循环迭代从零迭代到2个阵列的长度,设置变量i

对于每次迭代,我将变量left设置为该位置的值,而right为下一个值设置。如果左侧是正面的,右为负,我们会发生碰撞。进行绝对比较,如果right不大,我将其删除。如果left不大,我将其删除。然后,我从内部循环中折断,以便再次调用外循环。

如果我到达内部循环的末端,我将should_continue设置为false,并且外循环也将进入。在python中,一个for loop可以具有另一个块,只有在循环未中断时才会调用(例如,使用break语句)。

我的perl解决方案相似,除了我可以直接从内部循环跳到外循环,因此不需要should_continue变量。

例子

$ ./ch-2.py 2 3 -1
[2, 3]

$ ./ch-2.py 3 2 -4
[-4]

$ ./ch-2.py 1 -1
[]