diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-11-18 10:42:49 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-18 10:42:49 +0000 |
| commit | f26b7d00ff88814fe3336680a7d4c9ebca98b468 (patch) | |
| tree | 891c1a5b55a875c70fa90e77a139f34b261bfc6b /challenge-034 | |
| parent | 10fedc105b2c4642f817afe20e0d63952020e8e0 (diff) | |
| parent | d22f05c4d469e714c1d90d67387954156a6a9ff4 (diff) | |
| download | perlweeklychallenge-club-f26b7d00ff88814fe3336680a7d4c9ebca98b468.tar.gz perlweeklychallenge-club-f26b7d00ff88814fe3336680a7d4c9ebca98b468.tar.bz2 perlweeklychallenge-club-f26b7d00ff88814fe3336680a7d4c9ebca98b468.zip | |
Merge pull request #944 from jaldhar/challenge-034
Challenge 34 by Jaldhar H. Vyas: the missing challenge.
Diffstat (limited to 'challenge-034')
| -rwxr-xr-x | challenge-034/jaldhar-h-vyas/perl5/ch-1.pl | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/challenge-034/jaldhar-h-vyas/perl5/ch-1.pl b/challenge-034/jaldhar-h-vyas/perl5/ch-1.pl new file mode 100755 index 0000000000..b245e5c543 --- /dev/null +++ b/challenge-034/jaldhar-h-vyas/perl5/ch-1.pl @@ -0,0 +1,55 @@ +#!/usr/bin/perl +use warnings; +use strict; +use 5.010; + +sub pick { + my @range = @{$_[0]}; + my $quantity = $_[1]; + + if ($quantity < 1 || $quantity > scalar @range) { + die "out of range\n"; + } + + my @picked; + + for my $i (0 .. $quantity) { + my $try = q{ }; + while ($try eq q{ }) { + $try = $range[int(rand(scalar @range))]; + } + @range = map { $_ eq $try ? q{ } : $_; } @range; + push @picked, $try; + } + + return wantarray ? @picked : $picked[0]; +} + +sub binarySearch { + my @haystack = @{$_[0]}; + my $needle = $_[1]; + + if (@haystack && scalar @haystack) { + my $mid = int (scalar @haystack / 2); + + if ($needle eq $haystack[$mid]) { + return 1; + } + + if ($needle gt $haystack[$mid]) { + return binarySearch([@haystack[$mid + 1 .. scalar @haystack - 1]], + $needle); + } + + return binarySearch([@haystack[0 .. $mid - 1]], $needle); + } + + return undef; +} + +my @letters = ('a' .. 'z'); +my @haystack = pick([@letters], scalar @letters / 2); +my $needle = pick([@letters], 1); +say "is $needle in ", (join q{}, @haystack), '?'; +say binarySearch([sort @haystack], $needle) ? 'Yes.' : 'No.'; + |
