aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordasJake <no_mail@github.com>2021-11-23 23:33:15 +0100
committerdasJake <no_mail@github.com>2021-11-23 23:33:15 +0100
commitfe6ef5470946dc22efc1d04a61af03f7b3559e22 (patch)
tree1ac330004aa25b5489cf77d3916f2ca046d72dbf
parent7273b996d81ab9cc525f3cc5163a9ff135ede306 (diff)
downloadperlweeklychallenge-club-fe6ef5470946dc22efc1d04a61af03f7b3559e22.tar.gz
perlweeklychallenge-club-fe6ef5470946dc22efc1d04a61af03f7b3559e22.tar.bz2
perlweeklychallenge-club-fe6ef5470946dc22efc1d04a61af03f7b3559e22.zip
140 add binary_to_decimal sub and addition
-rw-r--r--challenge-140/jake/perl/ch-1.pl58
1 files changed, 50 insertions, 8 deletions
diff --git a/challenge-140/jake/perl/ch-1.pl b/challenge-140/jake/perl/ch-1.pl
index 59f7ccbecd..112b2e33b9 100644
--- a/challenge-140/jake/perl/ch-1.pl
+++ b/challenge-140/jake/perl/ch-1.pl
@@ -5,14 +5,31 @@ use warnings;
# with this script you can add 2 binary numbers and get their sum as binary number
# https://theweeklychallenge.org/blog/perl-weekly-challenge-140/#TASK1
-# get input
-print "decimal number: ";
-my $decimal_input = <STDIN>;
-chomp $decimal_input;
-my $a_binary = decimal_to_binary ( $decimal_input );
-printf ( "binary number: %i\n", $a_binary );
-
-# convert dec to bin
+# get input of 2 binary numbers
+
+print "binary number a: ";
+my $binary_input_a = <STDIN>;
+print "binary number b: ";
+my $binary_input_b = <STDIN>;
+chomp ( $binary_input_a, $binary_input_b );
+
+
+# convert binaries to decimals
+
+my $a_decimal = binary_to_decimal ( $binary_input_a );
+my $b_decimal = binary_to_decimal ( $binary_input_b );
+
+
+# perform regular addition on decimals
+
+my $result_decimal = $a_decimal + $b_decimal;
+
+
+# convert decimal results to binary
+
+my $result_binary = decimal_to_binary ( $result_decimal );
+print "$result_binary\n";
+
sub decimal_to_binary {
my ( $decimal ) = @_;
@@ -40,4 +57,29 @@ sub _decimal_to_binary {
$power++;
return _decimal_to_binary ( $power, $decimal_number, $binary_quantum );
+}
+
+sub binary_to_decimal {
+ my ( $binary ) = @_;
+
+ return _binary_to_decimal ( $binary, 0, 0 );
+}
+
+sub _binary_to_decimal {
+ my ( $binary_number, $power, $acc, $tail ) = @_;
+
+ return $acc if $binary_number eq '';
+
+ $tail = chop ($binary_number);
+
+ if ( $tail == 1 ) {
+ $acc += 2**$power;
+ $power++;
+ return _binary_to_decimal ( $binary_number, $power, $acc );
+ }
+
+ if ( $tail == 0 ) {
+ $power++;
+ return _binary_to_decimal ( $binary_number, $power, $acc );
+ }
} \ No newline at end of file