aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvinodk89 <vinodkk89@gmail.com>2020-09-30 00:09:19 +0530
committervinodk89 <vinodkk89@gmail.com>2020-09-30 00:09:19 +0530
commit600f4830787b5611192f1e77fc1f3bb45fc894af (patch)
tree58de676e63c44fc1e9ceacf3aaff5a246007e26a
parent0f50bf1e03970b42514876ebb74e1673a2e9a44b (diff)
downloadperlweeklychallenge-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.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;
+}