aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-09-29 20:35:35 +0100
committerGitHub <noreply@github.com>2020-09-29 20:35:35 +0100
commit5c70bb780bd8e2ee107386c3c38d38a9b2ad362f (patch)
treec914e985ab18e6ae0fe69c67bb877b2c50845af5
parent63baf5c0693405f5e3bc3d87a0f523ee712b964c (diff)
parent600f4830787b5611192f1e77fc1f3bb45fc894af (diff)
downloadperlweeklychallenge-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.pl44
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;
+}