每周挑战197
abaoqian1,My solutions
任务1:移动零
任务
您获得了整数列表,@list
。
写一个脚本以将所有零(如果存在)移至结尾,同时保持非零元素的相对顺序。
我的解决方案
这可能是一年中最直接的任务!在锅炉板代码之外,我的Python解决方案只有三个语句,而Perl中只有两个语句。两者都可以在单个语句中完成,但这可以降低可读性。
i生成了一个名为solutions
的列表,该列表具有从原始列表中的所有非零数字,附加了所有零号码。这确保了非零数字的顺序保持正确的顺序。
例子
$ ./ch-1.py 1 0 3 0 0 5
1, 3, 5, 0, 0, 0
$ ./ch-1.py 1 6 4
1, 6, 4
$ ./ch-1.py 0 1 0 2 0
1, 2, 0, 0, 0
任务2:摆动排序
任务
您获得了整数列表,@list
。
编写一个脚本以在给定列表上执行Wiggle排序。摆动排序将例如list[0] < list[1] > list[2] < list[3]
â。
我的解决方案
另一方面,我的白板在解决这个问题方面做了一些工作。显然,并非所有列表都可以产生一个工作解决方案,而1, 2, 2
是一个显而易见的解决方案。
这是我解决更改的方法:
-
list
是python中的一个保留词,所以我选择了n
的值。 Perl解决方案使用@list
。 - 按相反顺序排序列表数字(即
n[0]
是最大的数字)。 - 将列表分为两个,
big_n
和small_n
。如果有奇数元素,则small_n
将具有中位数。 - 使用zip_longest(来自Python的Itertools)或mesh(从Perl's List :: Util)将列表合并在一起,从
big_n
中获取每个迭代中的big_n
和small_n
的值。在有奇数元素的情况下,我还删除了无值(perl中的unfef)。 - 遍历列表以检查没有两个相等的相邻值。例如案例将失败,既要大于检查的次数,又会失败。如果发生这种情况,我会显示一个错误消息。
- 打印结果。
例子
$ ./ch-2.py 1 5 1 1 6 4
1, 6, 1, 5, 1, 4
$ ./ch-2.py 1 3 2 2 3 1
2, 3, 1, 3, 1, 2