每周挑战225
#python #perl #theweeklychallenge

每周穆罕默德·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 | )

我的解决方案

这是一项卷曲任务。在任务文本中,有五个输入和四个输出。在提供的三个示例中,输入和输出的数量相同。

因此,我几乎忽略了编写的任务,而是根据提供的三个示例来工作。

考虑到这一点,它成为一项直接的任务。首先是计算leftright列表。

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