祝贺穆罕默德今年接受了White Camel Award。我想不出一个更好的接收者,因为他在Perl社区中不懈的工作。
每周挑战226
每周穆罕默德·S·安瓦尔(Mohammad S.我的解决方案首先用Python编写,然后转换为Perl。这是我们所有人练习一些编码的好方法。
任务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