DEV Community

Simon Green
Simon Green

Posted on

Counting the coins

Weekly Challenge 223

Each week Mohammad S. Anwar sends out The Weekly Challenge, a chance for all of us to come up with solutions to two weekly tasks. My solutions are written in Python first, and then converted to Perl. It's a great way for us all to practice some coding.

Challenge, My solutions

Task 1: Count Primes


You are given a positive integer, $n.

Write a script to find the total count of primes less than or equal to the given integer.

My solution

This is nearly an identical task as the second task from challenge 198. The only difference is that challenge was to count values less than $n, while this one is less than or equal to that value.

Therefore I copy and pasted that code, and changed the counter to include the supplied number.


$ ./ 10

$ ./ 1

$ ./ 20
Enter fullscreen mode Exit fullscreen mode

Task 2: Box Coins


You are given an array representing box coins, @box.

Write a script to collect the maximum coins until you took out all boxes. If we pick box[i] then we collect the coins $box[i-1] * $box[i] * $box[i+1]. If $box[i+1] or $box[i-1] is out of bound then treat it as 1 coin.

My solution

For this challenge, I have a recursive function called collect_coins. It takes a list (array in Perl) of coins. If there is only one coin remaining, I return that.

If there is more than one coin, I loop through the positions from 0 to one less than the number of coins, using the variable i. For each iteration I calculate the number of coins

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

and call the function again with that coin removed.

        new_coins = coins.copy()
        del new_coins[i]
        collect += collect_coins(new_coins)
Enter fullscreen mode Exit fullscreen mode

I then record this score in the collections list. The function returns the maximum collections score.


$ ./ 3 1 5 8

$ ./ 1 5
Enter fullscreen mode Exit fullscreen mode

Top comments (0)