aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-11-18 22:18:45 +0000
committerGitHub <noreply@github.com>2023-11-18 22:18:45 +0000
commit4132ffd37278849a388587b14c1fabff6d2f1981 (patch)
treee443094d7761cd5c8bfc9a2821f3c2475c011d63
parent5c3ee7e72fb8bd6464f743c910cce9717197d870 (diff)
parent6bdf2bb4792421f7285305ab0688c123b900d07e (diff)
downloadperlweeklychallenge-club-4132ffd37278849a388587b14c1fabff6d2f1981.tar.gz
perlweeklychallenge-club-4132ffd37278849a388587b14c1fabff6d2f1981.tar.bz2
perlweeklychallenge-club-4132ffd37278849a388587b14c1fabff6d2f1981.zip
Merge pull request #9083 from LubosKolouch/master
feat(challenge-234/lubos-kolouch/perl,python,raku/): Challenge 234 LK Perl Python Raku
-rw-r--r--challenge-243/lubos-kolouch/perl/ch-1.pl46
-rw-r--r--challenge-243/lubos-kolouch/perl/ch-2.pl18
-rw-r--r--challenge-243/lubos-kolouch/python/ch-1.py43
-rw-r--r--challenge-243/lubos-kolouch/python/ch-2.py26
-rw-r--r--challenge-243/lubos-kolouch/raku/ch-1.raku38
-rw-r--r--challenge-243/lubos-kolouch/raku/ch-2.raku13
6 files changed, 184 insertions, 0 deletions
diff --git a/challenge-243/lubos-kolouch/perl/ch-1.pl b/challenge-243/lubos-kolouch/perl/ch-1.pl
new file mode 100644
index 0000000000..fdbdd56b7e
--- /dev/null
+++ b/challenge-243/lubos-kolouch/perl/ch-1.pl
@@ -0,0 +1,46 @@
+use strict;
+use warnings;
+
+# Perl subroutine to count reverse pairs
+sub count_reverse_pairs {
+ my @nums = @_;
+ return _merge_sort( \@nums, 0, scalar @nums - 1 );
+}
+
+sub _merge_sort {
+ my ( $nums, $left, $right ) = @_;
+
+ return 0 if $left >= $right;
+
+ my $mid = int( ( $left + $right ) / 2 );
+ my $count = _merge_sort( $nums, $left, $mid ) + _merge_sort( $nums, $mid + 1, $right );
+
+ # Count reverse pairs
+ my ( $i, $j ) = ( $left, $mid + 1 );
+ while ( $i <= $mid ) {
+ $j++ while ( $j <= $right && $nums->[$i] > 2 * $nums->[$j] );
+ $count += $j - ( $mid + 1 );
+ $i++;
+ }
+
+ # Merge step
+ my @sorted = ();
+ ( $i, $j ) = ( $left, $mid + 1 );
+ while ( $i <= $mid && $j <= $right ) {
+ if ( $nums->[$i] <= $nums->[$j] ) {
+ push @sorted, $nums->[ $i++ ];
+ }
+ else {
+ push @sorted, $nums->[ $j++ ];
+ }
+ }
+ push @sorted, @{$nums}[ $i .. $mid ] if $i <= $mid;
+ push @sorted, @{$nums}[ $j .. $right ] if $j <= $right;
+ @{$nums}[ $left .. $right ] = @sorted;
+
+ return $count;
+}
+
+# Testing with example inputs
+print count_reverse_pairs( 1, 3, 2, 3, 1 ), "\n"; # Output: 2
+print count_reverse_pairs( 2, 4, 3, 5, 1 ), "\n"; # Output: 3
diff --git a/challenge-243/lubos-kolouch/perl/ch-2.pl b/challenge-243/lubos-kolouch/perl/ch-2.pl
new file mode 100644
index 0000000000..3606c4d4b9
--- /dev/null
+++ b/challenge-243/lubos-kolouch/perl/ch-2.pl
@@ -0,0 +1,18 @@
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+sub floor_sum {
+ my @nums = @_;
+ my $sum = 0;
+ for my $i ( 0 .. $#nums ) {
+ for my $j ( 0 .. $#nums ) {
+ $sum += int( $nums[$i] / $nums[$j] );
+ }
+ }
+ return $sum;
+}
+
+# Tests
+is( floor_sum( 2, 5, 9 ), 10, 'Test Example 1' );
+is( floor_sum( 7, 7, 7, 7, 7, 7, 7 ), 49, 'Test Example 2' );
diff --git a/challenge-243/lubos-kolouch/python/ch-1.py b/challenge-243/lubos-kolouch/python/ch-1.py
new file mode 100644
index 0000000000..e942d2ed94
--- /dev/null
+++ b/challenge-243/lubos-kolouch/python/ch-1.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+
+from typing import List
+
+
+def count_reverse_pairs(nums: list[int]) -> int:
+ def merge_sort(left: int, right: int) -> int:
+ if left >= right:
+ return 0
+
+ mid = (left + right) // 2
+ count = merge_sort(left, mid) + merge_sort(mid + 1, right)
+
+ # Count reverse pairs
+ i, j = left, mid + 1
+ while i <= mid:
+ while j <= right and nums[i] > 2 * nums[j]:
+ j += 1
+ count += j - (mid + 1)
+ i += 1
+
+ # Merge step
+ sorted_nums = []
+ i, j = left, mid + 1
+ while i <= mid and j <= right:
+ if nums[i] <= nums[j]:
+ sorted_nums.append(nums[i])
+ i += 1
+ else:
+ sorted_nums.append(nums[j])
+ j += 1
+ sorted_nums.extend(nums[i : mid + 1])
+ sorted_nums.extend(nums[j : right + 1])
+ nums[left : right + 1] = sorted_nums
+
+ return count
+
+ return merge_sort(0, len(nums) - 1)
+
+
+# Testing with example inputs
+print(count_reverse_pairs([1, 3, 2, 3, 1])) # Output: 2
+print(count_reverse_pairs([2, 4, 3, 5, 1])) # Output: 3
diff --git a/challenge-243/lubos-kolouch/python/ch-2.py b/challenge-243/lubos-kolouch/python/ch-2.py
new file mode 100644
index 0000000000..eea7bf2a01
--- /dev/null
+++ b/challenge-243/lubos-kolouch/python/ch-2.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+
+import math
+from typing import List
+
+
+def floor_sum(nums: list[int]) -> int:
+ """
+ Calculate the sum of floor division results for every combination of elements in the array.
+
+ Args:
+ nums (List[int]): A list of positive integers.
+
+ Returns:
+ int: The sum of the floor division results.
+ """
+ return sum(
+ math.floor(nums[i] / nums[j])
+ for i in range(len(nums))
+ for j in range(len(nums))
+ )
+
+
+# Tests
+assert floor_sum([2, 5, 9]) == 10
+assert floor_sum([7, 7, 7, 7, 7, 7, 7]) == 49
diff --git a/challenge-243/lubos-kolouch/raku/ch-1.raku b/challenge-243/lubos-kolouch/raku/ch-1.raku
new file mode 100644
index 0000000000..ac103b431a
--- /dev/null
+++ b/challenge-243/lubos-kolouch/raku/ch-1.raku
@@ -0,0 +1,38 @@
+sub count-reverse-pairs(@nums) {
+ merge-sort(0, @nums.elems - 1, @nums)
+}
+
+sub merge-sort($left, $right, @nums) {
+ return 0 if $left >= $right;
+
+ my $mid = ($left + $right) div 2;
+ my $count = merge-sort($left, $mid, @nums) + merge-sort($mid + 1, $right, @nums);
+
+ # Count reverse pairs
+ my ($i, $j) = ($left, $mid + 1);
+ while ($i <= $mid) {
+ $j++ while ($j <= $right && @nums[$i] > 2 * @nums[$j]);
+ $count += $j - ($mid + 1);
+ $i++;
+ }
+
+ # Merge step
+ my @sorted;
+ ($i, $j) = ($left, $mid + 1);
+ while ($i <= $mid && $j <= $right) {
+ if (@nums[$i] <= @nums[$j]) {
+ @sorted.push(@nums[$i++]);
+ } else {
+ @sorted.push(@nums[$j++]);
+ }
+ }
+ @sorted.append(@nums[$i..$mid]) if $i <= $mid;
+ @sorted.append(@nums[$j..$right]) if $j <= $right;
+ @nums[$left..$right] = @sorted;
+
+ return $count;
+}
+
+# Testing with example inputs
+say count-reverse-pairs(1, 3, 2, 3, 1); # Output: 2
+say count-reverse-pairs(2, 4, 3, 5, 1); # Output: 3
diff --git a/challenge-243/lubos-kolouch/raku/ch-2.raku b/challenge-243/lubos-kolouch/raku/ch-2.raku
new file mode 100644
index 0000000000..cedd36acc5
--- /dev/null
+++ b/challenge-243/lubos-kolouch/raku/ch-2.raku
@@ -0,0 +1,13 @@
+use Test;
+
+sub floor-sum(@nums) {
+ return [+] do for @nums -> $i {
+ map { ($i / $_).Int }, @nums
+ }
+}
+
+# Tests
+is floor-sum(2, 5, 9), 10, 'Test Example 1';
+is floor-sum(7, 7, 7, 7, 7, 7, 7), 49, 'Test Example 2';
+
+done-testing;