diff options
| author | Lubos Kolouch <lubos@kolouch.net> | 2021-11-27 21:31:10 +0100 |
|---|---|---|
| committer | Lubos Kolouch <lubos@kolouch.net> | 2021-11-27 21:31:10 +0100 |
| commit | e1d559a51ba7c0de8b6cc21bdc545da9185a023b (patch) | |
| tree | 5d9e955e60ee5ae3b077ecd05a3bc43352aa38c3 /challenge-140 | |
| parent | f098f043cd72701cd86105ce11a1ea8d6d4a9b0f (diff) | |
| download | perlweeklychallenge-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.pl | 69 |
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; |
