diff options
| -rw-r--r-- | challenge-079/lubos-kolouch/perl/ch-1.pl | 38 | ||||
| -rw-r--r-- | challenge-079/lubos-kolouch/perl/ch-2.pl | 57 | ||||
| -rw-r--r-- | challenge-079/lubos-kolouch/python/ch-1.py | 30 | ||||
| -rw-r--r-- | challenge-079/lubos-kolouch/python/ch-2.py | 40 |
4 files changed, 165 insertions, 0 deletions
diff --git a/challenge-079/lubos-kolouch/perl/ch-1.pl b/challenge-079/lubos-kolouch/perl/ch-1.pl new file mode 100644 index 0000000000..3f5c188b9c --- /dev/null +++ b/challenge-079/lubos-kolouch/perl/ch-1.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl +#=============================================================================== +# +# FILE: ch-1.pl +# +# USAGE: ./ch-1.pl +# +# DESCRIPTION: Perl Weekly Challenge Task 1 +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-079/ +# Count set bits +# +# AUTHOR: Lubos Kolouch +#=============================================================================== + +use strict; +use warnings; + +sub get_dec2bin { + my $what = shift; + + my $count; + + for (1..$what) { + my $str = unpack("B32", pack("N", $_)); + $count += () = $str =~ /1/g; + } + + return $count % 1_000_000_007; +} + +use Test::More; + +is(get_dec2bin(4), 5, 'Test 4'); +is(get_dec2bin(3), 4, 'Test 3'); + +done_testing; + + diff --git a/challenge-079/lubos-kolouch/perl/ch-2.pl b/challenge-079/lubos-kolouch/perl/ch-2.pl new file mode 100644 index 0000000000..6ad5f8dad4 --- /dev/null +++ b/challenge-079/lubos-kolouch/perl/ch-2.pl @@ -0,0 +1,57 @@ +#!/bin/env perl +#=============================================================================== +# +# FILE: ch-2.py +# +# USAGE: ./ch-2.py +# +# DESCRIPTION: Perl Weekly Challenge Task 2 +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-079/ +# Trapper Rain Water +# +# AUTHOR: Lubos Kolouch +#============================================================================== +use strict; +use warnings; +use List::Util qw/max min/; + +sub trapWater{ + + my $arr =shift; + + my $n = scalar @$arr; + my $left_max = 0; + my $right_max = 0; + + my $water = 0; + + my $low = 0; + my $high = $n - 1; + + while ($low <= $high) { + if ($arr->[$low] < $arr->[$high]) { + if ($arr->[$low] > $left_max) { + $left_max = $arr->[$low]; + } else { + $water += $left_max - $arr->[$low]; + } + $low += 1; + } else { + if ($arr->[$high] > $right_max) { + $right_max = $arr->[$high]; + } else { + $water += $right_max - $arr->[$high]; + } + $high -= 1; + } + } + + return $water; +} + +use Test::More; + +is(trapWater([2, 1, 4, 1, 2, 5]), 6); +is(trapWater([3, 1, 3, 1, 1, 5]), 6); + +done_testing; diff --git a/challenge-079/lubos-kolouch/python/ch-1.py b/challenge-079/lubos-kolouch/python/ch-1.py new file mode 100644 index 0000000000..18cd9792cd --- /dev/null +++ b/challenge-079/lubos-kolouch/python/ch-1.py @@ -0,0 +1,30 @@ +#!/bin/env python +""" +=============================================================================== +# +# FILE: ch-1.py +# +# USAGE: ./ch-1.py +# +# DESCRIPTION: Perl Weekly Challenge Task 1 +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-079/ +# Count set bits +# +# AUTHOR: Lubos Kolouch +#============================================================================== +""" + + +def get_dec2bin(what: int): + """ Get the number of set 1s """ + + count = 0 + for i in range(1, what+1): + mod_str = str(bin(i))[2:] + count += sum(list(map(int, mod_str))) + + return count + + +assert get_dec2bin(4) == 5 +assert get_dec2bin(3) == 4 diff --git a/challenge-079/lubos-kolouch/python/ch-2.py b/challenge-079/lubos-kolouch/python/ch-2.py new file mode 100644 index 0000000000..31e0534f51 --- /dev/null +++ b/challenge-079/lubos-kolouch/python/ch-2.py @@ -0,0 +1,40 @@ +#!/bin/env python +""" +=============================================================================== +# +# FILE: ch-2.py +# +# USAGE: ./ch-2.py +# +# DESCRIPTION: Perl Weekly Challenge Task 2 +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-079/ +# Trapper Rain Water +# +# AUTHOR: Lubos Kolouch +#============================================================================== +""" + +def trapWater(arr): + + n = len(arr) + left = [0]*n + right = [0]*n + + water = 0 + + left[0] = arr[0] + for i in range(1, len(arr)): + left[i] = max(left[i-1], arr[i]) + + right[n-1] = arr[n-1] + for i in range(n-2, -1, -1): + right[i] = max(right[i + 1], arr[i]) + + for i in range(0, n): + water += min(left[i], right[i]) - arr[i] + + return water + +assert trapWater([2, 1, 4, 1, 2, 5]) == 6 +assert trapWater([3, 1, 3, 1, 1, 5]) == 6 + |
