Respected Monks,
Came across this question on LinkeIn for Perl. Someone asked how to find a missing number if in a list of numbers. I came up with following.
use warnings; use strict; my @arr = (19,17,22,23,24,15,16,25..35); sub find_missing { my @stuff = @_; my @sorted_arr = sort {$a <=> $b} @stuff; foreach my $num(0..$#sorted_arr-1) { my $current = $sorted_arr[$num]; my $next = $sorted_arr[++$num]; my @missing = ($current+1..$next-1); print "$current,"; if ($next - $current != 1) { print "(missing: [@missing]),"; } } print "$sorted_arr[-1]"; } &find_missing(@arr);
The output is shown below:
C:\>perl findmissing.pl 15,16,17,(missing: [18]),19,(missing: [20 21]),22,23,24,25,26,27,28,29 +,30,31,32,33,34,35
Is there a better way to write this? I have to do a -1 on the $#sorted_array. I am sure there is a better way, but just dont seem to get it.
On a side node, quite disappointingly, It took me quite a while to write this one. I've started re learning perl and thought I was doing good, till this one came up and shattered my confidence. :) I am glad I figured it out, but it sure took me a long time.
Update:I did several updates to the script so please pardon them.| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |