diff options
| author | dasJake <no_mail@github.com> | 2021-11-23 23:33:15 +0100 |
|---|---|---|
| committer | dasJake <no_mail@github.com> | 2021-11-23 23:33:15 +0100 |
| commit | fe6ef5470946dc22efc1d04a61af03f7b3559e22 (patch) | |
| tree | 1ac330004aa25b5489cf77d3916f2ca046d72dbf | |
| parent | 7273b996d81ab9cc525f3cc5163a9ff135ede306 (diff) | |
| download | perlweeklychallenge-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.pl | 58 |
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 |
