diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-04-11 17:21:04 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-04-11 17:21:04 +0100 |
| commit | a1552b3b2ce9fbb2a518fb203326c09cf529515a (patch) | |
| tree | a4f30f54314132722c618843275ff6d70fe8687a /challenge-055/mohammad-anwar | |
| parent | bf3c97c2134534290a6969824936a68f7da91af9 (diff) | |
| download | perlweeklychallenge-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.pl | 38 | ||||
| -rw-r--r-- | challenge-055/mohammad-anwar/perl/ch-1a.pl | 42 |
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]; +} |
