aboutsummaryrefslogtreecommitdiff
path: root/challenge-050
diff options
context:
space:
mode:
authoraliciabielsa <aliciabielsa@gmail.com>2020-03-08 12:19:50 +0100
committeraliciabielsa <aliciabielsa@gmail.com>2020-03-08 12:19:50 +0100
commit51a95de4a1a81a95961fe43ba2bfbc1c4b4adc04 (patch)
tree27c5778580bc92deaf0467ed2a52ec8fb284b797 /challenge-050
parentd1275b48c66f1b0ce68f886b40fb1a1442ceabb3 (diff)
downloadperlweeklychallenge-club-51a95de4a1a81a95961fe43ba2bfbc1c4b4adc04.tar.gz
perlweeklychallenge-club-51a95de4a1a81a95961fe43ba2bfbc1c4b4adc04.tar.bz2
perlweeklychallenge-club-51a95de4a1a81a95961fe43ba2bfbc1c4b4adc04.zip
challenge 050 perl
Diffstat (limited to 'challenge-050')
-rw-r--r--challenge-050/alicia-bielsa/perl/ch-1.pl103
-rw-r--r--challenge-050/alicia-bielsa/perl/ch-2.pl31
-rw-r--r--challenge-050/alicia-bielsa/raku/ch-2.p634
3 files changed, 168 insertions, 0 deletions
diff --git a/challenge-050/alicia-bielsa/perl/ch-1.pl b/challenge-050/alicia-bielsa/perl/ch-1.pl
new file mode 100644
index 0000000000..9c868aebac
--- /dev/null
+++ b/challenge-050/alicia-bielsa/perl/ch-1.pl
@@ -0,0 +1,103 @@
+use strict;
+use warnings;
+use Data::Dumper;
+use Test::More tests => 4;
+
+
+
+my %hTestSet = ( '1' => { given => [[2,7], [3,9],[10,12], [15,19], [18,22] ],
+ expected => [[2, 9], [10, 12], [15, 22] ]
+ },
+ '2' => { given => [ [18,22] , [2,7],[10,12], [15,19], [3,9] ],
+ expected => [[2, 9], [10, 12], [15, 22] ]
+ },
+ '3' => { given => [ [2,7],[10,12], [15,19], [3,9],[0,22] ],
+ expected => [[0,22] ]
+ },
+ '4' => { given => [ [19,25],[2,7],[10,12], [15,19],[1,3] ],
+ expected => [[1,7] ,[10,12], [15,25]]
+ }
+ );
+
+
+foreach my $testSet (sort keys %hTestSet ){
+ my @aMergedIntervalsFinal = checkIntervals( @{$hTestSet{$testSet}{given}});
+ @aMergedIntervalsFinal = sort { $$a[0] <=> $$b[0] } @aMergedIntervalsFinal;
+ @{$hTestSet{$testSet}{merged}} = @aMergedIntervalsFinal;
+}
+
+foreach my $testSet (sort keys %hTestSet ){
+ my @aMergedIntervalsFinal = @{$hTestSet{$testSet}{merged}};
+ foreach my $count ( 0..$#aMergedIntervalsFinal){
+ print "[".$aMergedIntervalsFinal[$count][0].",".$aMergedIntervalsFinal[$count][1]."]";
+ unless ($count == $#aMergedIntervalsFinal){
+ print ",";
+ }
+ }
+ is_deeply( $hTestSet{$testSet}{expected},\@aMergedIntervalsFinal );
+}
+
+sub checkIntervals {
+ my @aIntervals = @_;
+ my @aMergedIntervals = ();
+
+ foreach my $interval ( @aIntervals){
+ unless(scalar @aMergedIntervals){
+ push (@aMergedIntervals, $interval);
+ next;
+ }
+ my $isMerged = 0;
+ foreach my $mergedInterval (@aMergedIntervals){
+ my $flagMerge = doIntervalsOverlap($interval, $mergedInterval );
+
+ if ($flagMerge){
+ mergeIntervals($interval, $mergedInterval);
+ $isMerged = 1;
+ }
+ }
+ unless ($isMerged) {
+ push (@aMergedIntervals, $interval);
+ }
+ }
+ if (scalar(@aMergedIntervals) != scalar(@aIntervals)){
+ checkIntervals(@aMergedIntervals);
+ } else {
+ return @aMergedIntervals;
+ }
+}
+
+sub doIntervalsOverlap {
+ my $interval = shift;
+ my $mergedInterval = shift;
+
+
+
+ if ( $$interval[0] >= $$mergedInterval[0] && $$interval[0] <= $$mergedInterval[1] ){
+ return 1;
+ }
+ if ( $$interval[1] >= $$mergedInterval[0] && $$interval[1] <= $$mergedInterval[1] ){
+ return 1;
+ }
+
+ if ( $$interval[0] <= $$mergedInterval[0] && $$interval[1] >= $$mergedInterval[1] ){
+ return 1;
+ }
+ if ( $$mergedInterval[0] <= $$interval[0] && $$mergedInterval[1] >= $$interval[1] ){
+ return 1;
+ }
+ return 0;
+}
+
+sub mergeIntervals {
+ my $interval = shift;
+ my $mergedInterval = shift;
+
+ if ($$interval[0] < $$mergedInterval[0]){
+ $$mergedInterval[0] = $$interval[0];
+ }
+ if ($$interval[1] > $$mergedInterval[1]){
+ $$mergedInterval[1] = $$interval[1];
+ }
+
+}
+
diff --git a/challenge-050/alicia-bielsa/perl/ch-2.pl b/challenge-050/alicia-bielsa/perl/ch-2.pl
new file mode 100644
index 0000000000..2c4cf87b16
--- /dev/null
+++ b/challenge-050/alicia-bielsa/perl/ch-2.pl
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+
+
+my @aListIntegers = ();
+for (0..int(rand(10)+3)){
+ my $number = int(rand(50))+1;
+ push (@aListIntegers , $number );
+}
+
+my @aNobleIntegers = findNobleIntegers(@aListIntegers);
+
+print "List: ".join(',', @aListIntegers)."\n";
+print "Noble Integers: ".join(',', @aNobleIntegers)."\n";
+
+sub findNobleIntegers {
+ my @aIntegers = @_;
+ my @aNoble = ();
+ foreach my $integer (@aIntegers){
+ my $countGreater = 0;
+ foreach my $integerToCompare (@aIntegers){
+ if ( $integerToCompare > $integer ){
+ $countGreater++;
+ }
+ }
+ if ($integer == $countGreater){
+ push (@aNoble , $integer) ;
+ }
+ }
+ return @aNoble ;
+}
diff --git a/challenge-050/alicia-bielsa/raku/ch-2.p6 b/challenge-050/alicia-bielsa/raku/ch-2.p6
new file mode 100644
index 0000000000..c558d10ff5
--- /dev/null
+++ b/challenge-050/alicia-bielsa/raku/ch-2.p6
@@ -0,0 +1,34 @@
+use v6;
+
+my @aListIntegers = ();
+
+for (0..10.rand.Int+3) {
+ my $number = 50.rand.Int+1;
+ @aListIntegers.push($number);
+}
+
+my @aNobleIntegers = findNobleIntegers(@aListIntegers);
+say "List: " ~ join(',', @aListIntegers) ;
+say "Noble Integers: " ~ join(',', @aNobleIntegers);
+
+
+sub findNobleIntegers(@aIntegers) {
+ my @aNoble = ();
+ for @aIntegers {
+ my $countGreater = countTotalGreater(@aIntegers,$_);
+ if $_ == $countGreater {
+ @aNoble.push( $_) ;
+ }
+ }
+ return @aNoble ;
+}
+
+sub countTotalGreater(@aIntegers, $integer) {
+ my $countGreater = 0;
+ for @aIntegers {
+ if $_ > $integer {
+ $countGreater++;
+ }
+ }
+ return $countGreater;
+} \ No newline at end of file