diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-29 11:46:52 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-09-29 11:46:52 +0100 |
| commit | 659977df093cd33402856085fffbcba2b5d47dee (patch) | |
| tree | c9c54afa4cbc0b3bb9712cebb9a201fe2a2af342 /challenge-080 | |
| parent | 47107af7c6dd1fb9a67cd69349e0eed17e983915 (diff) | |
| download | perlweeklychallenge-club-659977df093cd33402856085fffbcba2b5d47dee.tar.gz perlweeklychallenge-club-659977df093cd33402856085fffbcba2b5d47dee.tar.bz2 perlweeklychallenge-club-659977df093cd33402856085fffbcba2b5d47dee.zip | |
- Updated Perl solutions post Raku one.
Diffstat (limited to 'challenge-080')
| -rw-r--r-- | challenge-080/mohammad-anwar/perl/ch-1.pl | 20 | ||||
| -rw-r--r-- | challenge-080/mohammad-anwar/perl/ch-1.t | 24 |
2 files changed, 21 insertions, 23 deletions
diff --git a/challenge-080/mohammad-anwar/perl/ch-1.pl b/challenge-080/mohammad-anwar/perl/ch-1.pl index 15a961862b..cbd1935ab6 100644 --- a/challenge-080/mohammad-anwar/perl/ch-1.pl +++ b/challenge-080/mohammad-anwar/perl/ch-1.pl @@ -10,31 +10,27 @@ use strict; use warnings; -use Data::Dumper; my $N = $ARGV[0] || "2, 3, 7, 6, 8, -1, -10, 15"; printf("%s => %d\n", $N, smallest_positive_number(get_list($N))); # # -# METHODS +# SUBROUTINES sub smallest_positive_number { - my ($array) = @_; + my ($arrayref) = @_; - my %numbers = (); - foreach my $n (@$array) { - next unless $n > 0; - $numbers{$n} = 1; - } + my @positive_numbers = sort(grep $_ > 0, @$arrayref); + return 1 unless (@positive_numbers); my $i = 0; - foreach my $j (sort {$a <=> $b} keys %numbers) { - next if (++$i == $j); - return $i; + for my $n (1 .. $positive_numbers[-1]) { + next if ($n == $positive_numbers[$i++]); + return $n; } - return ++$i; + return $positive_numbers[-1]+1; } sub get_list { diff --git a/challenge-080/mohammad-anwar/perl/ch-1.t b/challenge-080/mohammad-anwar/perl/ch-1.t index 4312d4a022..7bd3ce5355 100644 --- a/challenge-080/mohammad-anwar/perl/ch-1.t +++ b/challenge-080/mohammad-anwar/perl/ch-1.t @@ -12,12 +12,17 @@ use strict; use warnings; use Test::More; +# examples from the task +is (smallest_positive_number([5, 2, -2, 0]), 1, "testing (5, 2, -2, 0)"); +is (smallest_positive_number([1, 8, -1]), 2, "testing (1, 8, -1)"); +is (smallest_positive_number([2, 0, -1]), 1, "testing (2, 0, -1)"); + +# some other test cases is (smallest_positive_number([1, 2, 0]), 3, "testing (1, 2, 0)"); is (smallest_positive_number([-8, -7, -6]), 1, "testing (-8, -7, -6)"); is (smallest_positive_number([3, 4, -1, 1]), 2, "testing (3, 4, -1, 1)"); is (smallest_positive_number([2, 3, 7, 6, 8, -1, -10, 15]), 1, "testing (2, 3, 7, 6, 8, -1, -10, 15)"); - done_testing; # @@ -25,19 +30,16 @@ done_testing; # METHODS sub smallest_positive_number { - my ($array) = @_; + my ($arrayref) = @_; - my %numbers = (); - foreach my $n (@$array) { - next unless $n > 0; - $numbers{$n} = 1; - } + my @positive_numbers = sort(grep $_ > 0, @$arrayref); + return 1 unless (@positive_numbers); my $i = 0; - foreach my $j (sort {$a <=> $b} keys %numbers) { - next if (++$i == $j); - return $i; + for my $n (1 .. $positive_numbers[-1]) { + next if ($n == $positive_numbers[$i++]); + return $n; } - return ++$i; + return $positive_numbers[-1]+1; } |
