aboutsummaryrefslogtreecommitdiff
path: root/challenge-140
diff options
context:
space:
mode:
authorLubos Kolouch <lubos@kolouch.net>2021-11-27 21:31:10 +0100
committerLubos Kolouch <lubos@kolouch.net>2021-11-27 21:31:10 +0100
commite1d559a51ba7c0de8b6cc21bdc545da9185a023b (patch)
tree5d9e955e60ee5ae3b077ecd05a3bc43352aa38c3 /challenge-140
parentf098f043cd72701cd86105ce11a1ea8d6d4a9b0f (diff)
downloadperlweeklychallenge-club-e1d559a51ba7c0de8b6cc21bdc545da9185a023b.tar.gz
perlweeklychallenge-club-e1d559a51ba7c0de8b6cc21bdc545da9185a023b.tar.bz2
perlweeklychallenge-club-e1d559a51ba7c0de8b6cc21bdc545da9185a023b.zip
Challenge 140 Task 1 LK Perl
Diffstat (limited to 'challenge-140')
-rw-r--r--challenge-140/lubos-kolouch/perl/ch-1.pl69
1 files changed, 69 insertions, 0 deletions
diff --git a/challenge-140/lubos-kolouch/perl/ch-1.pl b/challenge-140/lubos-kolouch/perl/ch-1.pl
new file mode 100644
index 0000000000..d1a28879be
--- /dev/null
+++ b/challenge-140/lubos-kolouch/perl/ch-1.pl
@@ -0,0 +1,69 @@
+use strict;
+use warnings;
+
+sub parse_input {
+ my $what = shift;
+
+ my @nums = ($what) =~ /=\s+(\d+).*?(\d+)/;
+
+ return @nums;
+}
+
+sub get_bin_sum {
+ my $what = shift;
+
+ my ( $num1, $num2 ) = parse_input($what);
+
+ return 0 unless $num1 * $num2;
+ my $result = '';
+ my $overflow = 0;
+
+ my $smaller = $num1;
+ my $larger = $num2;
+
+ if ( length($num1) > length($num2) ) {
+ $smaller = $num2;
+ $larger = $num1;
+ }
+
+ for my $num ( 1 .. length($larger) ) {
+ my $add1 = substr( $larger, length($larger) - $num, 1 );
+
+ my $add2 = 0;
+ $add2 = substr( $smaller, length($smaller) - $num, 1 ) if $num <= length($smaller);
+
+ my $sum = $add1 + $add2 + $overflow;
+
+ if ( $sum < 2 ) {
+ $overflow = 0;
+ $result = $sum . $result;
+ }
+ elsif ( $sum == 2 ) {
+ $overflow = 1;
+ $result = "0" . $result;
+ }
+ else {
+ $overflow = 1;
+ $result = "1" . $result;
+
+ }
+
+ }
+ $result = "1" . $result if substr( $result, 0, 1 ) == "0";
+
+ return $result;
+}
+
+use Test::More;
+
+my ( $test_num1, $test_num2 ) = parse_input('$a = 11; $b = 1;');
+
+is( $test_num1, 11 );
+is( $test_num2, 1 );
+
+is( get_bin_sum('$a = 1; $b = 1;'), 10 );
+is( get_bin_sum('$a = 11; $b = 1;'), 100 );
+is( get_bin_sum('$a = 10; $b = 1;'), 11 );
+is( get_bin_sum('$a = 0; $b = 0;'), 0 );
+
+done_testing;