每周穆罕默德·S·安瓦尔(Mohammad S.我的解决方案首先用Python编写,然后转换为Perl。这是我们所有人练习一些编码的好方法。
abaoqian1,My solutions
任务1:最大单词
任务
您有一个句子列表,@list
。
句子是一个单个单词的列表,这些单词被一个没有前导或尾随空间的单个空间隔开。
写一个脚本以找出单个句子中出现的最大单词数量。
我的解决方案
这很简单。我们知道单词的数量比每个句子中的空间数多。因此,我只是在一个称为words
的变量中计算sentences
列表中的空格数。然后,我打印该列表的最大值。
在Python中,我们可以使用计数方法来计算空间数量。同时,perl hack是使用tr方法用空格代替空间。 tr
返回发现的出现数量。
例子
$ ./ch-1.py "Perl and Raku belong to the same family.", "I love Perl.", "The Perl and Raku Conference."
8
$ ./ch-1.py "The Weekly Challenge.", "Python is the most popular guest language.", "Team PWC has over 300 members."
7
任务2:左右总和差异
任务
您有一个整数,@ints
。
写一个脚本以返回左右总和差异数组,如下所示:
@ints = (a, b, c, d, e)
@left = (0, a, (a+b), (a+b+c))
@right = ((c+d+e), (d+e), e, 0)
@left_right_sum_diff = ( | 0 - (c+d+e) |,
| a - (d+e) |,
| (a+b) - e |,
| (a+b+c) - 0 | )
我的解决方案
这是一项卷曲任务。在任务文本中,有五个输入和四个输出。在提供的三个示例中,输入和输出的数量相同。
因此,我几乎忽略了编写的任务,而是根据提供的三个示例来工作。
考虑到这一点,它成为一项直接的任务。首先是计算left
和right
列表。
l = len(n)
left = [sum(n[0:i]) for i in range(l)]
right = [sum(n[i+1:l]) for i in range(l)]
,然后计算两个列表之间的绝对差异。
solution = [abs(left[i] - right[i]) for i in range(l)]
是的,这可以在一个函数中完成,但是这些挑战的那一点也不是编写最有效的代码,而是要解释工作。
Perl解决方案更笨拙,因为没有简单的方法可以将空数组作为子集作为原始数组。对于perl解决方案,我将0备用0到@left
数组,并将其附加到@right
阵列。
my $l = scalar(@n);
my @left = ( 0, map { sum( @n[ 0 .. $_ ] ) } ( 0 .. $l - 2 ) );
my @right = ( map( { sum( @n[ $_ .. $l - 1 ] ) } ( 1 .. $l - 1 ) ), 0 );
例子
$ ./ch-2.py 10 4 8 3
15, 1, 11, 22
$ ./ch-2.py 1
0
$ ./ch-2.py 1 2 3 4 5
14, 11, 6, 1, 10