diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-03-03 12:45:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-03 12:45:29 +0000 |
| commit | 8645bdd9683da3b2491aad2f2e5ca7faaf8d85c4 (patch) | |
| tree | 1e24a3d1b6c9c4249a014951576d692b8ba28450 | |
| parent | dc377b614ab227eadb11a4b46f5c8aa2ad8efe30 (diff) | |
| parent | 3ec6ff004d554781020ae947034a4533ce34494e (diff) | |
| download | perlweeklychallenge-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-x | challenge-050/sol-demuth/perl/ch-1.pl | 50 | ||||
| -rwxr-xr-x | challenge-050/sol-demuth/perl/ch-2.pl | 29 |
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; + } +} |
