计算硬币
#python #perl #theweeklychallenge

每周挑战223

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

ChallengeMy solutions

任务1:计数素数

任务

您有一个正整数,$n

编写一个脚本以查找小于或等于给定整数的总数。

我的解决方案

这几乎与挑战198的second task几乎是一项相同的任务。唯一的区别是,挑战是计数小于$n的值,而该值小于或等于该值。

因此,我复制并粘贴了该代码,并将计数器更改为包括提供的编号。

例子

$ ./ch-1.py 10
4

$ ./ch-1.py 1
0

$ ./ch-1.py 20
8

任务2:框硬币

任务

您有一个代表盒子硬币的数组, @box。

写一个脚本以收集最大硬币,直到取出所有盒子。如果我们选择盒子[i],我们会收集硬币$box[i-1] * $box[i] * $box[i+1]。如果$box[i+1]$box[i-1]不合时宜,则将其视为1个硬币。

我的解决方案

为了解决这一挑战,我具有称为collect_coins的递归功能。它获取了coins的列表(perl中的数组)。如果只剩下一枚硬币,我会退货。

如果有多个硬币,我使用变量i循环从0到1个硬币的位置。对于每次迭代,我计算硬币的数量

        collect = coins[i]
        if i > 0:
            collect *= coins[i-1]
        if i < remaining_coins - 1:
            collect *= coins[i+1]

并通过删除该硬币再次调用该功能。

        new_coins = coins.copy()
        del new_coins[i]
        collect += collect_coins(new_coins)

i然后将此分数记录在集合列表中。该功能返回最大收集分数。

例子

$ ./ch-2.py 3 1 5 8
167

$ ./ch-2.py 1 5
10