diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-11-25 13:04:17 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-25 13:04:17 +0000 |
| commit | a1a2de7fddd327f720d7acd0905eaca3104c3641 (patch) | |
| tree | 2c4368ee90dd40d90808495aeba986adb1985b3c | |
| parent | 3e515d407e3b1174d8dab36f6fc717be037603d9 (diff) | |
| parent | f2a40d26b1be9a34d675653de17c6abc215af004 (diff) | |
| download | perlweeklychallenge-club-a1a2de7fddd327f720d7acd0905eaca3104c3641.tar.gz perlweeklychallenge-club-a1a2de7fddd327f720d7acd0905eaca3104c3641.tar.bz2 perlweeklychallenge-club-a1a2de7fddd327f720d7acd0905eaca3104c3641.zip | |
Merge pull request #5276 from corvettes13/patch-9
Create ch-1.pl
| -rw-r--r-- | challenge-140/paul-fajman/perl/ch-1.pl | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/challenge-140/paul-fajman/perl/ch-1.pl b/challenge-140/paul-fajman/perl/ch-1.pl new file mode 100644 index 0000000000..1803836cb7 --- /dev/null +++ b/challenge-140/paul-fajman/perl/ch-1.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl + +# Weekly Challenge 140 Task 1 +# +# You are given two decimal-coded binary numbers, $a and $b. +# +# Write a script to simulate the addition of the given binary numbers. +# +# The script should simulate something like $a + $b. (operator overloading) + +use strict; + +my ($a, $b, $c, $final); +my @test = qw (11 1 101 1 100 11); + +for ($c=0; $c<$#test+1; $c+=2) { + $a = $test[$c]; + $b = $test[$c+1]; + + $final = binary_add($a, $b); + print "Input: \$a = $a; \$b = $b\n"; + print "Output: $final\n\n"; +} + +sub binary_add { + my $x = shift; + my $y = shift; + +# Determine which number is larger + my $diff = length($x) - length($y); + my ($sum, $num, $i); + my (@arr1, @arr2, @num); + my $carry=0; + +# Append left with 0s to help with piecewise math. + if ($diff > 0) { + $diff = length($x); + $y = sprintf("%0${diff}d", $y); + + } + elsif ($diff < 0) { + $diff = length($y); + $x = sprintf("%0${diff}d", $x); + } + +# Split numbers into pieces + @arr1=split(//,$x); + @arr2=split(//,$y); + for ($i=$#arr1; $i>-1;$i--) { + $sum=$arr1[$i]+$arr2[$i]+$carry; + +# If/elses to ensure no values greater than 1. + if ($sum eq 2) { + $sum = 0; + $carry = 1; + } + elsif ($sum eq 3) { + $sum = 1; + $carry = 1; + } + else { + $carry = 0; + } + $num=$sum.$num + } + +# One last check for a carry. + $num="1".$num if $carry eq 1; + return "$num"; +} |
