aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-03-03 12:45:29 +0000
committerGitHub <noreply@github.com>2020-03-03 12:45:29 +0000
commit8645bdd9683da3b2491aad2f2e5ca7faaf8d85c4 (patch)
tree1e24a3d1b6c9c4249a014951576d692b8ba28450
parentdc377b614ab227eadb11a4b46f5c8aa2ad8efe30 (diff)
parent3ec6ff004d554781020ae947034a4533ce34494e (diff)
downloadperlweeklychallenge-club-8645bdd9683da3b2491aad2f2e5ca7faaf8d85c4.tar.gz
perlweeklychallenge-club-8645bdd9683da3b2491aad2f2e5ca7faaf8d85c4.tar.bz2
perlweeklychallenge-club-8645bdd9683da3b2491aad2f2e5ca7faaf8d85c4.zip
Merge pull request #1351 from soldemuth/new-branch
challenge 050 - sol demuth
-rwxr-xr-xchallenge-050/sol-demuth/perl/ch-1.pl50
-rwxr-xr-xchallenge-050/sol-demuth/perl/ch-2.pl29
2 files changed, 79 insertions, 0 deletions
diff --git a/challenge-050/sol-demuth/perl/ch-1.pl b/challenge-050/sol-demuth/perl/ch-1.pl
new file mode 100755
index 0000000000..19a15b8ce2
--- /dev/null
+++ b/challenge-050/sol-demuth/perl/ch-1.pl
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my @sets = (
+ [2,7], [3,9], [10,12], [15,19], [18,22],
+);
+
+print "Intervals:\n". dumpSets(@sets);
+
+@sets = sort {
+ # pre-sort by beginning then end of intervals
+ # allows maintaining single array for merge tracking
+ (
+ $a->[0] <=> $b->[0]
+ ) || (
+ $a->[1] <=> $b->[1]
+ )
+} @sets;
+
+my $cur = undef;
+my $i = 0; # cleaner than for loop, IMHO
+
+foreach my $nxt (@sets) {
+ if (
+ !$cur # start
+ || $cur->[1] < $nxt->[0] # no overlap, increment
+ ) {
+ $cur = $nxt;
+ } else {
+ # part overlap, next interval ends after current
+ if ($cur->[1] < $nxt->[1]) {
+ # current takes end of next
+ $cur->[1] = $nxt->[1];
+ }
+ # consume next
+ splice @sets, $i, 1;
+ }
+
+ $i++;
+}
+
+print "Merged:\n" . dumpSets(@sets);
+
+sub dumpSets { # convenience for printing sets of intervals
+ return join(', ',
+ map { '[' . $_->[0] . ', ' . $_->[1] . ']' } @_
+ ) . "\n";
+}
diff --git a/challenge-050/sol-demuth/perl/ch-2.pl b/challenge-050/sol-demuth/perl/ch-2.pl
new file mode 100755
index 0000000000..9f6a496095
--- /dev/null
+++ b/challenge-050/sol-demuth/perl/ch-2.pl
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $len = int(rand(7)) + 3;
+my @L = ();
+
+while ($len) {
+ my $i = int(rand(50)) + 1;
+ # assuming we want a unique list
+ unless (grep { $_ == $i } @L) {
+ push @L, $i;
+ $len--;
+ }
+}
+
+print '[' . join(', ', @L) . "]\n\n";
+
+foreach my $i (sort { $a <=> $b } @L) {
+ if (scalar(grep {$_ > $i} @L) == $i) {
+ print "Noble Integer: $i\n";
+
+ # there cannot be multiple in a list because
+ # the next greater noble integer nullifies the
+ # the previous smaller noble integer
+ last;
+ }
+}