From 04b8ba44665dd5354ea591eb746d036258a85ad8 Mon Sep 17 00:00:00 2001 From: Simon Green Date: Mon, 1 Jul 2024 14:47:06 +1000 Subject: sgreen solutions to challenge 276 --- challenge-276/sgreen/README.md | 4 ++-- challenge-276/sgreen/blog.txt | 1 + challenge-276/sgreen/perl/ch-1.pl | 22 ++++++++++++++++++++++ challenge-276/sgreen/perl/ch-2.pl | 26 ++++++++++++++++++++++++++ challenge-276/sgreen/python/ch-1.py | 35 +++++++++++++++++++++++++++++++++++ challenge-276/sgreen/python/ch-2.py | 37 +++++++++++++++++++++++++++++++++++++ challenge-276/sgreen/python/test.py | 20 ++++++++++++++++++++ 7 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 challenge-276/sgreen/blog.txt create mode 100755 challenge-276/sgreen/perl/ch-1.pl create mode 100755 challenge-276/sgreen/perl/ch-2.pl create mode 100755 challenge-276/sgreen/python/ch-1.py create mode 100755 challenge-276/sgreen/python/ch-2.py create mode 100755 challenge-276/sgreen/python/test.py diff --git a/challenge-276/sgreen/README.md b/challenge-276/sgreen/README.md index 7b9d0fd9d5..621adc8383 100644 --- a/challenge-276/sgreen/README.md +++ b/challenge-276/sgreen/README.md @@ -1,3 +1,3 @@ -# The Weekly Challenge 275 +# The Weekly Challenge 276 -Blog: [Broken digits](https://dev.to/simongreennet/broken-digits-e7k) +Blog: [Complete frequency](https://dev.to/simongreennet/complete-frequency-2fke) diff --git a/challenge-276/sgreen/blog.txt b/challenge-276/sgreen/blog.txt new file mode 100644 index 0000000000..9d51dc6b1a --- /dev/null +++ b/challenge-276/sgreen/blog.txt @@ -0,0 +1 @@ +https://dev.to/simongreennet/complete-frequency-2fke \ No newline at end of file diff --git a/challenge-276/sgreen/perl/ch-1.pl b/challenge-276/sgreen/perl/ch-1.pl new file mode 100755 index 0000000000..8920dfc9d7 --- /dev/null +++ b/challenge-276/sgreen/perl/ch-1.pl @@ -0,0 +1,22 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use experimental 'signatures'; + +sub main (@hours) { + my $count = 0; + + foreach my $i ( 0 .. $#hours - 1 ) { + foreach my $j ( $i + 1 .. $#hours ) { + if ( ( $hours[$i] + $hours[$j] ) % 24 == 0 ) { + $count++; + } + } + } + + say $count; +} + +main(@ARGV); \ No newline at end of file diff --git a/challenge-276/sgreen/perl/ch-2.pl b/challenge-276/sgreen/perl/ch-2.pl new file mode 100755 index 0000000000..28c0d0ead7 --- /dev/null +++ b/challenge-276/sgreen/perl/ch-2.pl @@ -0,0 +1,26 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use experimental 'signatures'; + +use List::Util qw(max); + +sub main (@ints) { + # Convert the list in a frequency dictionary + my %freq = (); + foreach my $i (@ints) { + $freq{$i}++; + } + + my $max_freq = max( values(%freq) ); + + # Count the number of elements with the maximum frequency + my $elements = grep { $freq{$_} == $max_freq } keys(%freq); + + # Multiply the number of elements by the frequency + say $elements * $max_freq; +} + +main(@ARGV); \ No newline at end of file diff --git a/challenge-276/sgreen/python/ch-1.py b/challenge-276/sgreen/python/ch-1.py new file mode 100755 index 0000000000..589990a0ba --- /dev/null +++ b/challenge-276/sgreen/python/ch-1.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + +import sys + + +def complete_day(hours: list) -> int: + """ + Counts the number of pairs of hours in the given list that sum up to a multiple of 24. + + Args: + hours (list): A list of integers representing the hours. + + Returns: + int: The number of pairs of hours that sum up to a multiple of 24. + """ + 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 + + +def main(): + # Convert input into integers + array = [int(n) for n in sys.argv[1:]] + result = complete_day(array) + print(result) + + +if __name__ == '__main__': + main() diff --git a/challenge-276/sgreen/python/ch-2.py b/challenge-276/sgreen/python/ch-2.py new file mode 100755 index 0000000000..198042c31b --- /dev/null +++ b/challenge-276/sgreen/python/ch-2.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +from collections import Counter +import sys + + +def maximum_frequency(ints: list) -> str: + """ + Calculate the maximum frequency of elements in a list and returns the + number of elements with that appear with this frequency. + + Args: + ints (list): A list of integers. + + Returns: + str: The number of elements with appear most frequency. + """ + # Convert the list in a frequency dictionary + freq = Counter(ints) + max_freq = max(freq.values()) + + # Count the number of elements with the maximum frequency + elements = sum(1 for v in freq.values() if v == max_freq) + + # Multiply the number of elements by the frequency + return elements * max_freq + + +def main(): + # Convert input into integers + array = [int(n) for n in sys.argv[1:]] + result = maximum_frequency(array) + print(result) + + +if __name__ == '__main__': + main() diff --git a/challenge-276/sgreen/python/test.py b/challenge-276/sgreen/python/test.py new file mode 100755 index 0000000000..8f9c4d93cf --- /dev/null +++ b/challenge-276/sgreen/python/test.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 + +import unittest +ch_1 = __import__('ch-1') +ch_2 = __import__('ch-2') + + +class TestClass(unittest.TestCase): + def test_ch_1(self): + self.assertEqual(ch_1.complete_day([12, 12, 30, 24, 24]), 2) + self.assertEqual(ch_1.complete_day([72, 48, 24, 5]), 3) + self.assertEqual(ch_1.complete_day([12, 18, 24]), 0) + + def test_ch_2(self): + self.assertEqual(ch_2.maximum_frequency([1, 2, 2, 4, 1, 5]), 4) + self.assertEqual(ch_2.maximum_frequency([1, 2, 3, 4, 5]), 5) + + +if __name__ == '__main__': + unittest.main() -- cgit