aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwanderdoc <wanderdoc@users.noreply.github.com>2025-08-26 19:36:31 +0200
committerGitHub <noreply@github.com>2025-08-26 19:36:31 +0200
commitaa7fae19e7619395d31f6003c8bd67c16c1d3181 (patch)
tree54f67dff2c22038e33b9c21fe6506b0845994d15
parent6cfca326e661eda6a7d762110c4918abdc11f54e (diff)
downloadperlweeklychallenge-club-aa7fae19e7619395d31f6003c8bd67c16c1d3181.tar.gz
perlweeklychallenge-club-aa7fae19e7619395d31f6003c8bd67c16c1d3181.tar.bz2
perlweeklychallenge-club-aa7fae19e7619395d31f6003c8bd67c16c1d3181.zip
Create ch-1.pl
-rw-r--r--challenge-336/wanderdoc/perl/ch-1.pl75
1 files changed, 75 insertions, 0 deletions
diff --git a/challenge-336/wanderdoc/perl/ch-1.pl b/challenge-336/wanderdoc/perl/ch-1.pl
new file mode 100644
index 0000000000..da7290a4ce
--- /dev/null
+++ b/challenge-336/wanderdoc/perl/ch-1.pl
@@ -0,0 +1,75 @@
+#!perl
+use strict;
+use warnings FATAL => qw(all);
+
+=prompt
+You are given an array of integers.
+Write a script to return true if the given array can be divided into one or more groups of same size such that each group has two or more members having same value.
+
+Example 1
+
+Input: @ints = (1,1,2,2,2,2)
+Output: true
+
+Groups: (1,1), (2,2), (2,2)
+
+
+Example 2
+
+Input: @ints = (1,1,1,2,2,2,3,3)
+Output: false
+
+Groups: (1,1,1), (2,2,2), (3,3)
+
+
+Example 3
+
+Input: @ints = (5,5,5,5,5,5,7,7,7,7,7,7)
+Output: true
+
+Groups: (5,5,5,5,5,5), (7,7,7,7,7,7)
+
+
+Example 4
+
+Input: @ints = (1,2,3,4)
+Output: false
+
+
+Example 5
+
+Input: @ints = (8,8,9,9,10,10,11,11)
+Output: true
+
+Groups: (8,8), (9,9), (10,10), (11,11)
+=cut
+
+
+
+
+use List::Util qw(min first);
+use constant { true => 1, false => 0 };
+
+use Test2::V0 -no_srand => 1;
+
+is(equal_group(1,1,2,2,2,2), true, 'Example 1');
+is(equal_group(1,1,1,2,2,2,3,3), false, 'Example 2');
+is(equal_group(5,5,5,5,5,5,7,7,7,7,7,7), true, 'Example 3');
+is(equal_group(1,2,3,4), false, 'Example 4');
+is(equal_group(8,8,9,9,10,10,11,11), true, 'Example 5');
+done_testing();
+
+
+sub equal_group
+{
+ my @arr = @_;
+ @arr = sort {$a <=> $b} @arr;
+ my %freq;
+ $freq{$_}++ for @arr;
+ my @slots = values %freq;
+ my $max_size = min(@slots);
+ return false if $max_size < 2;
+ return false if defined first { $_ % $max_size != 0 } @slots;
+ return true;
+
+}