排序列表
#python #perl #theweeklychallenge

每周挑战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是一个显而易见的解决方案。

这是我解决更改的方法:

  1. list是python中的一个保留词,所以我选择了n的值。 Perl解决方案使用@list
  2. 按相反顺序排序列表数字(即n[0]是最大的数字)。
  3. 将列表分为两个,big_nsmall_n。如果有奇数元素,则small_n将具有中位数。
  4. 使用zip_longest(来自Python的Itertools)或mesh(从Perl's List :: Util)将列表合并在一起,从big_n中获取每个迭代中的big_nsmall_n的值。在有奇数元素的情况下,我还删除了无值(perl中的unfef)。
  5. 遍历列表以检查没有两个相等的相邻值。例如案例将失败,既要大于检查的次数,又会失败。如果发生这种情况,我会显示一个错误消息。
  6. 打印结果。

例子

$ ./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