diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-09-29 20:35:35 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-29 20:35:35 +0100 |
| commit | 5c70bb780bd8e2ee107386c3c38d38a9b2ad362f (patch) | |
| tree | c914e985ab18e6ae0fe69c67bb877b2c50845af5 | |
| parent | 63baf5c0693405f5e3bc3d87a0f523ee712b964c (diff) | |
| parent | 600f4830787b5611192f1e77fc1f3bb45fc894af (diff) | |
| download | perlweeklychallenge-club-5c70bb780bd8e2ee107386c3c38d38a9b2ad362f.tar.gz perlweeklychallenge-club-5c70bb780bd8e2ee107386c3c38d38a9b2ad362f.tar.bz2 perlweeklychallenge-club-5c70bb780bd8e2ee107386c3c38d38a9b2ad362f.zip | |
Merge pull request #2409 from vinodk89/master
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; +} |
