Ircnet Perl Minigolf 4

You get on the commandline a set of natural numbers (integers greater than or equal to zero). Find the smallest natural number not on the list, and print it to STDOUT followed by a newline. Nothing should appear on STDERR, the returncode does not matter. There will be 0 to 30 arguments, matching /^0\z|^[1-9]\d{0,5}\z/. The numbers can appear in any order and there can be duplicates.

example input:

3 7 13 15 0 1 0 4 21 5 13 13 13 9 10 12 8 6
  
Some missing numbers in this sequence are 2, 11, 14 ... The smallest of these is 2, so the output should be:
2
  

Check your solution using the version 3 test program

The challenge runs under the generic perl golf rules.

Tell the length of your solutions (but not the solution itself) to ton- on ircnet #perl or mail the number to perl-golf@ton.iguana.be

The challenge finishes at 2002/08/18 23:00:00 UTC

Leaderboard

34 ton,mtve,suo,s.turner
36 tybalt89,beowulf,m.wrenn
37 k.c.ivey,topmach,ya,banshee,e.a.zachs,terje,h.pazdziora,autrijus
38 s7l
39 kcwu
40 dkr,eugene
49 juuso
52 m.eloise,j.p.vidal,ufobat
55 r.champoux
  

Some Solutions

ton         34 @a=0..30;@a[@ARGV]=();print<@a>.$/
mtve        34 $-+=$_==$-for(@ARGV)x30;print$-,$/
suo         34 @x=0..30;@x[@ARGV]=();print<@x>.$/
s.turner    34 -l $^C+=$_==$^Cfor(@ARGV)x30;print$^C
tybalt89    36 -l $-++while map/^$-$/,@ARGV;print$-
beowulf     36 -l $?++while map/^$?$/,@ARGV;print$?
m.wrenn     36 -l $?++while map/^$?$/,@ARGV;print$?
ton         36 -l $%++while grep!$_--,@ARGV;print$%
k.c.ivey    37 -l $%++while" @ARGV "=~/ $% /;print$%
TopMach     37 -l $%++while"@ARGV"=~/\b$%\b/;print$%
ya          37 -l ++$%while"@ARGV"=~/\b$%\b/;print$%
banshee     37 -l $%++while"@ARGV"=~/\b$%\b/;print$%
e.a.zachs   37 $%++until"@ARGV"!~/\b$%\b/;print$%,$/
terje       37 -l $%++while" @ARGV "=~/ $% /;print$%
h.pazdziora 37 -l $-++while grep$-==$_,@ARGV;print$-
autrijus    37 -l $?++while" @ARGV "=~/ $? /;print$?
s7l         38 $-++until" @ARGV "!~/ $- /&&print$-.$/
tybalt89    38 -l print"@{[@h{@a,@ARGV}=@a=0..30]}"*1
e.a.zachs   38 -l "@ARGV"=~/\b$%\b/?++$%&do$0:print$%
kcwu        39 (grep$%==$_,@ARGV)?++$%.do$0:print$%,$/
dkr         40 -l $_=0;$_++while" @ARGV "=~/ $_ /;print
terje       40 -l @a{@ARGV}=%::;++$%while$a{$%};print$%
e.a.zachs   42 -l print+(grep"@ARGV"!~/\b$_\b/,0..9x5)[0]
e.a.zachs   42 -l print+($_)=grep"@ARGV"!~/\b$_\b/,0..9x5
ton         43 -l print+(grep!$_--,@ARGV)&&1+`$^X $0 @ARGV`
banshee     43 -l @s[@ARGV]=(1)x30;$s[$_++]?do$0:print--$_
autrijus    45 -l map$.=~chr||print^exit,0..map$..=chr,@ARGV
ton         46 -l $_=1for@a[@ARGV];" @a  "=~/  /;print$-[0]/2
kcwu        46 -l vec($a,$_,8)++for@ARGV;print index"$a^@","^@"
juuso       49 -l E:{for(@ARGV){$i==$_&&{$i++,redo E}}print$i|0}
m.eloise    52 -l for($i=0,$_=join' ',@ARGV;/\b$i\b/;$i++){}print$i
j.p.vidal   52 -l for$n(0..30){do{print$n;exit}if!grep/^$n$/,@ARGV}
tybalt89    57 -l $_=" @{[0..30]} @ARGV ";s/( .*)(?= .*\1 )//g;print$_+0
dkr         60 -l $n=-1;sub f{$n++;for(@_){$_==$n&&return&f}$n}print f@ARGV
  

Post-mortem:

ton         33 print<@{q[@b,@ARGV]=@b=0..30}>.$/
tybalt89    33 print<@{h{@a,@ARGV}=@a=0..30}>.$/