diff options
| author | aliciabielsa <aliciabielsa@gmail.com> | 2020-03-08 12:19:50 +0100 |
|---|---|---|
| committer | aliciabielsa <aliciabielsa@gmail.com> | 2020-03-08 12:19:50 +0100 |
| commit | 51a95de4a1a81a95961fe43ba2bfbc1c4b4adc04 (patch) | |
| tree | 27c5778580bc92deaf0467ed2a52ec8fb284b797 /challenge-050 | |
| parent | d1275b48c66f1b0ce68f886b40fb1a1442ceabb3 (diff) | |
| download | perlweeklychallenge-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.pl | 103 | ||||
| -rw-r--r-- | challenge-050/alicia-bielsa/perl/ch-2.pl | 31 | ||||
| -rw-r--r-- | challenge-050/alicia-bielsa/raku/ch-2.p6 | 34 |
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 |
