diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2019-11-18 00:57:46 -0500 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2019-11-18 00:57:46 -0500 |
| commit | d22f05c4d469e714c1d90d67387954156a6a9ff4 (patch) | |
| tree | 89910774484f4acd8a63fd52fb55e5851faffab5 | |
| parent | 57a8f45d4ffab36063e210bcf7e98e7bb5d0c228 (diff) | |
| download | perlweeklychallenge-club-d22f05c4d469e714c1d90d67387954156a6a9ff4.tar.gz perlweeklychallenge-club-d22f05c4d469e714c1d90d67387954156a6a9ff4.tar.bz2 perlweeklychallenge-club-d22f05c4d469e714c1d90d67387954156a6a9ff4.zip | |
Challenge 34 by Jaldhar H. Vyas: the missing challenge.
| -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.'; + |
