所有的鸭子。两个22
#python #perl #theweeklychallenge

每周挑战222

对不起,上周没有发布。我打算在澳大利亚北部美丽的Coffs Harbour度假时做到这一点。不幸的是,我在星期六晚上被打电话来调试工作中的生产问题。

challengeMy solution

任务1:匹配成员

任务

您获得了积极整数的列表,@ints

编写列表增加订单后,写一个脚本以查找匹配成员。

我的解决方案

我希望这相对直接。创建一个排序的列表ints_sorted,然后使用列表理解(Python)和GREP(PERL)来计算相同的值数量。

在Python中,我们使用:

sum(1 for x in range(len(ints)) if ints[x] == ints_sorted[x])

perl解决方案是:

scalar( grep { $ints[$_] == $ints_sorted[$_] } ( 0 .. $#ints ) )

他们都做同样的事情。从0到数组的长度少,并比较列表的每个位置的值。 Pythonic方法是使用sum(1...。在perl中,scalar在列表中的项目数中返回,而grep将消除不相等的项目。

例子

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

$ ./ch-1.py 5 1 2 3 4
0

$ ./ch-1.py 1 2 3 4 5
5

任务2:最后成员

任务

您有一系列积极的整数,@ints

写一个脚本以查找最后一个成员,如果发现否则返回0。每个回合选择2个最大成员(x, y),然后根据以下条件决定,请继续此操作,直到将其留下1个成员或无。

  1. 如果x == y,则删除两个成员
  2. 如果x != y,则删除两个成员并添加新成员(y-x

我的解决方案

这些是我采取的步骤

  • 对列表(perl中的数组)进行分类。
  • 循环虽然列表中有多个项目
    • 删除两个称为xy的最后两个值。
    • 如果xy不同,请将它们之间的区别添加到ints数组,然后再次对其进行排序
  • 如果有一个,则打印最后一个号码,否则打印0

例子

$ ./ch-2.py 2 7 4 1 8 1
1

$ ./ch-2.py 1
1

$ ./ch-2.py 1 1
0