Complete frequency

simongreennet

Simon Green

Posted on July 1, 2024

Complete frequency

Weekly Challenge 276

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: Complete Day

Task

You are given an array of integers, @hours.

Write a script to return the number of pairs that forms a complete day. A complete day is defined as a time duration that is an exact multiple of 24 hours.

My solution

For this task, I could have used the combinations generator to create the pairs, but that seems like overkill for this task.

Instead I use a double loop. The other loop - with the variable i - is from 0 to two less than the number of items in the list. The inner loop - with the variable j - is from one more than i to one less than the number of items in the list. This method ensures that we use every possible pairs.

I have a variable called count which records the number of pairs when the combination of hours is a multiple of 24.

def complete_day(hours: list) -> int:
    count = 0
    items = len(hours)

    for i in range(items-1):
        for j in range(i+1, items):
            if (hours[i] + hours[j]) % 24 == 0:
                count += 1

    return count
Enter fullscreen mode Exit fullscreen mode

Examples

$ ./ch-1.py 12 12 30 24 24
2

$ ./ch-1.py 72 48 24 5
3

$ ./ch-1.py 12 18 24
0
Enter fullscreen mode Exit fullscreen mode

Task 2: Maximum Frequency

Task

You are given an array of positive integers, @ints.

Write a script to return the total number of elements in the given array which have the highest frequency.

My solution

For this task, I use the Counters function to turn the the list into a dict of frequencies. The key is the integer, the value is the number of times it occurs. Perl doesn't have a similar function, so I do this manually in my Perl solution.

The steps I take is as follows:

  1. Calculate the frequency of each integer, and store this in the freq dict (hash in Perl).
  2. Find the maximum frequency, and store this as max_freq.
  3. Count the number of elements in the freq dict that have max_freq. This is stored as the elements variable.
  4. Return the product of the max_freq and elements variable. This represents the number of items in the original array that have the highest frequency.
def maximum_frequency(ints: list) -> str:
    freq = Counter(ints)
    max_freq = max(freq.values())
    elements = sum(1 for v in freq.values() if v == max_freq)
    return elements * max_freq
Enter fullscreen mode Exit fullscreen mode

Examples

$ ./ch-2.py 1 2 2 4 1 5
4

$ ./ch-2.py 1 2 3 4 5
5
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
simongreennet
Simon Green

Posted on July 1, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Matchstick compression
perl Matchstick compression

November 24, 2024

The Break Game
perl The Break Game

November 17, 2024

Similar boomerang
perl Similar boomerang

November 3, 2024

Index and poker games
perl Index and poker games

October 20, 2024

Making connections
perl Making connections

September 8, 2024