aboutsummaryrefslogtreecommitdiff
path: root/challenge-034
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-11-18 10:42:49 +0000
committerGitHub <noreply@github.com>2019-11-18 10:42:49 +0000
commitf26b7d00ff88814fe3336680a7d4c9ebca98b468 (patch)
tree891c1a5b55a875c70fa90e77a139f34b261bfc6b /challenge-034
parent10fedc105b2c4642f817afe20e0d63952020e8e0 (diff)
parentd22f05c4d469e714c1d90d67387954156a6a9ff4 (diff)
downloadperlweeklychallenge-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-xchallenge-034/jaldhar-h-vyas/perl5/ch-1.pl55
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.';
+