aboutsummaryrefslogtreecommitdiff
path: root/challenge-055/mohammad-anwar
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-04-11 17:21:04 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-04-11 17:21:04 +0100
commita1552b3b2ce9fbb2a518fb203326c09cf529515a (patch)
treea4f30f54314132722c618843275ff6d70fe8687a /challenge-055/mohammad-anwar
parentbf3c97c2134534290a6969824936a68f7da91af9 (diff)
downloadperlweeklychallenge-club-a1552b3b2ce9fbb2a518fb203326c09cf529515a.tar.gz
perlweeklychallenge-club-a1552b3b2ce9fbb2a518fb203326c09cf529515a.tar.bz2
perlweeklychallenge-club-a1552b3b2ce9fbb2a518fb203326c09cf529515a.zip
- Added Perl solution to Flip Binary.
Diffstat (limited to 'challenge-055/mohammad-anwar')
-rw-r--r--challenge-055/mohammad-anwar/perl/ch-1.pl38
-rw-r--r--challenge-055/mohammad-anwar/perl/ch-1a.pl42
2 files changed, 80 insertions, 0 deletions
diff --git a/challenge-055/mohammad-anwar/perl/ch-1.pl b/challenge-055/mohammad-anwar/perl/ch-1.pl
new file mode 100644
index 0000000000..bce2c5008c
--- /dev/null
+++ b/challenge-055/mohammad-anwar/perl/ch-1.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $binary_str = $ARGV[0];
+
+print "$binary_str => ", flip_binary($binary_str), "\n";
+
+#
+#
+# METHOD
+
+sub flip_binary {
+ my ($binary_str) = @_;
+
+ die "ERROR: Missing binary string.\n"
+ unless defined $binary_str;
+ die "ERROR: Invalid binary string [$binary_str].\n"
+ unless ($binary_str =~ /^[01]+$/);
+
+ my $result = {};
+ my $size = length($binary_str);
+ foreach my $left (1 .. $size) {
+ foreach my $right ($left .. $size) {
+ my $_binary_str = $binary_str;
+ foreach my $i ($left .. $right) {
+ --$i;
+ my $c = substr($_binary_str, $i, 1);
+ $c = ($c) ? (0) : (1);
+ substr($_binary_str, $i, 1, $c);
+ }
+ $result->{ sprintf("%s (%s,%s)", $_binary_str, $left, $right) } = ($_binary_str =~ tr/1/1/);
+ }
+ }
+
+ return [ sort { $result->{$b} <=> $result->{$a} } keys %$result ]->[0];
+}
diff --git a/challenge-055/mohammad-anwar/perl/ch-1a.pl b/challenge-055/mohammad-anwar/perl/ch-1a.pl
new file mode 100644
index 0000000000..55cf2a0c51
--- /dev/null
+++ b/challenge-055/mohammad-anwar/perl/ch-1a.pl
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+is (flip_binary("10001"), "11111 (2,4)");
+is (flip_binary("10101"), "11011 (2,4)");
+is (flip_binary("00101"), "11011 (1,4)");
+
+done_testing;
+
+#
+#
+# METHOD
+
+sub flip_binary {
+ my ($binary_str) = @_;
+
+ die "ERROR: Missing binary string.\n"
+ unless defined $binary_str;
+ die "ERROR: Invalid binary string [$binary_str].\n"
+ unless ($binary_str =~ /^[01]+$/);
+
+ my $result = {};
+ my $size = length($binary_str);
+ foreach my $left (1 .. $size) {
+ foreach my $right ($left .. $size) {
+ my $_binary_str = $binary_str;
+ foreach my $i ($left .. $right) {
+ --$i;
+ my $c = substr($_binary_str, $i, 1);
+ $c = ($c) ? (0) : (1);
+ substr($_binary_str, $i, 1, $c);
+ }
+ $result->{ sprintf("%s (%s,%s)", $_binary_str, $left, $right) } = ($_binary_str =~ tr/1/1/);
+ }
+ }
+
+ return [ sort { $result->{$b} <=> $result->{$a} } keys %$result ]->[0];
+}