移动和去除
#python #perl #theweeklychallenge

祝贺穆罕默德今年接受了White Camel Award。我想不出一个更好的接收者,因为他在Perl社区中不懈的工作。

每周挑战226

每周穆罕默德·S·安瓦尔(Mohammad S.我的解决方案首先用Python编写,然后转换为Perl。这是我们所有人练习一些编码的好方法。

ChallengeMy solutions

任务1:洗牌字符串

任务

您有一个与字符串相同长度的字符串和一个索引。

以正确的顺序重新安排索引后,写一个脚本以返回字符串。

我的解决方案

通常,我的perl解决方案几乎是我的Python解决方案的音译。这次不是。 Python中的字符串是不变的,这意味着无法像Perl一样更改。

Python解决方案

对于python解决方案,我创建一个映射dict dict键是整数位置,值为字母。

mapping = {ints[i]: word[i] for i in range(len(ints))}

i然后以数值对键进行排序,然后在该位置打印值(字母)

for i in sorted(mapping):
    solution += mapping[i]

Perl解决方案

Perl解决方案更直接。我通过每对字母和位置进行工作,并将字母放在正确的位置。在Perl中,substr函数可以用作Getter and setter

foreach my $i ( 0 .. $#ints ) {
    substr( $solution, $ints[$i], 1, substr( $word, $i, 1 ) );
    }

例子

$ ./ch-1.py lacelengh 3 2 0 5 4 8 6 7 1
challenge

$ ./ch-1.py rulepark 4 7 3 1 0 5 2 6
perlraku

任务2:零数组

您有一系列非阴性整数,@ints

编写一个脚本以返回最小操作数以使每个元素等于零。

在每个操作中,您必须选择一个小于或等于数组中最小元素的正数,然后从数组中的每个正元素中减去。

我的解决方案

除非我缺少非常明显的东西,否则解决方案是独特的积极整数数量。在Python中,我们知道一组将删除重复数字,因此我的解决方案如下:

count = len(set(i for i in ints if i != 0))

与此同时,列表中的uniq函数:: util将实现相同的功能。

my $count = scalar( uniq grep { $_ != 0 } @ints );

例子

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

$ ./ch-2.py 0
0

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