/
ch-1.pl
79 lines (55 loc) · 1.92 KB
/
ch-1.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!perl
###############################################################################
=comment
Perl Weekly Challenge 080
=========================
Task #1
-------
*Smallest Positive Number Bits*
Submitted by: Mohammad S Anwar
You are given unsorted list of integers @N.
Write a script to find out the smallest positive number missing.
Example 1:
Input: @N = (5, 2, -2, 0)
Output: 1
Example 2:
Input: @N = (1, 8, -1)
Output: 2
Example 3:
Input: @N = (2, 0, -1)
Output: 1
=cut
###############################################################################
#--------------------------------------#
# Copyright © 2020 PerlMonk Athanasius #
#--------------------------------------#
# Exports:
use strict;
use warnings;
use Const::Fast; # const()
use Regexp::Common qw( number ); # %RE{num}
const my $USAGE =>
"Usage:
perl $0 [<N> ...]
[<N> ...] An unsorted list of integers\n";
#------------------------------------------------------------------------------
BEGIN
#------------------------------------------------------------------------------
{
$| = 1;
print "\nChallenge 080, Task #1: Smallest Positive Number Bits (Perl)\n\n";
}
#==============================================================================
MAIN:
#==============================================================================
{
my @N = @ARGV;
/\A$RE{num}{int}\z/ or die "ERROR: Non-integer '$_'\n$USAGE" for @N;
printf "Input: \@N = (%s)\n", join(', ', @N);
my %N; # Make a dictionary of the
++$N{ $_ } for @N; # listed integers
my $num = 1; # Find the lowest integer >
++$num while exists $N{ $num }; # 0 not in the list
print "Output: $num\n";
}
###############################################################################