diff options
| author | vinodk89 <vinodkk89@gmail.com> | 2020-09-30 00:09:19 +0530 |
|---|---|---|
| committer | vinodk89 <vinodkk89@gmail.com> | 2020-09-30 00:09:19 +0530 |
| commit | 600f4830787b5611192f1e77fc1f3bb45fc894af (patch) | |
| tree | 58de676e63c44fc1e9ceacf3aaff5a246007e26a | |
| parent | 0f50bf1e03970b42514876ebb74e1673a2e9a44b (diff) | |
| download | perlweeklychallenge-club-600f4830787b5611192f1e77fc1f3bb45fc894af.tar.gz perlweeklychallenge-club-600f4830787b5611192f1e77fc1f3bb45fc894af.tar.bz2 perlweeklychallenge-club-600f4830787b5611192f1e77fc1f3bb45fc894af.zip | |
Solutions for challenge 80
| -rw-r--r-- | challenge-080/vinod-k/perl/ch-1.pl | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/challenge-080/vinod-k/perl/ch-1.pl b/challenge-080/vinod-k/perl/ch-1.pl new file mode 100644 index 0000000000..de8ad8fa00 --- /dev/null +++ b/challenge-080/vinod-k/perl/ch-1.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use feature 'say'; + +no warnings 'uninitialized'; + +my @input_array = @ARGV; +@input_array = (5, 2, -2, 0) if scalar @ARGV == 0; +say "input numbers: (", (join ', ', @input_array), ")"; + +my $array_size = scalar @input_array; + +my $missing_number = findMissingNumber(\@input_array, $array_size); +say "Smallest positive number missing is: $missing_number"; + +sub findMissingNumber { + my ($a, $size ) = @_; + my @array = @$a; + + my ($val, $nextval); + my $i = 0; + + foreach (0..$size){ + $i = $_; + next if(($array[$i] <= 0) || ($array[$i] > $size)); + $val = $array[$i]; + while($array[$val -1] != $val){ + $nextval = $array[$val -1]; + $array[$val -1] = $val; + $val = $nextval; + last if(($val <= 0) || ($val > $size)); + } + } + foreach (0..$size){ + $i = $_; + if ($array[$i] != $i + 1){ + return $i + 1; + } + } + return $size + 1; +} |
