每周挑战222
对不起,上周没有发布。我打算在澳大利亚北部美丽的Coffs Harbour度假时做到这一点。不幸的是,我在星期六晚上被打电话来调试工作中的生产问题。
任务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个成员或无。
- 如果
x == y
,则删除两个成员 - 如果
x != y
,则删除两个成员并添加新成员(y-x
)
我的解决方案
这些是我采取的步骤
- 对列表(perl中的数组)进行分类。
- 循环虽然列表中有多个项目
- 删除两个称为
x
和y
的最后两个值。 - 如果
x
和y
不同,请将它们之间的区别添加到ints
数组,然后再次对其进行排序
- 删除两个称为
- 如果有一个,则打印最后一个号码,否则打印
0
。
例子
$ ./ch-2.py 2 7 4 1 8 1
1
$ ./ch-2.py 1
1
$ ./ch-2.py 1 1
0