diff options
| -rw-r--r-- | challenge-192/lubos-kolouch/perl/ch-1.pl | 18 | ||||
| -rw-r--r-- | challenge-192/lubos-kolouch/perl/ch-2.pl | 48 | ||||
| -rw-r--r-- | challenge-192/lubos-kolouch/python/ch-1.py | 22 | ||||
| -rw-r--r-- | challenge-192/lubos-kolouch/python/ch-2.py | 45 |
4 files changed, 133 insertions, 0 deletions
diff --git a/challenge-192/lubos-kolouch/perl/ch-1.pl b/challenge-192/lubos-kolouch/perl/ch-1.pl new file mode 100644 index 0000000000..d22fd5689f --- /dev/null +++ b/challenge-192/lubos-kolouch/perl/ch-1.pl @@ -0,0 +1,18 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Test::More; + +sub binary_flip { + my ($n) = @_; + my $binary = sprintf "%b", $n; # Convert to binary + $binary =~ tr/01/10/; # Flip the bits + return oct("0b$binary"); # Convert back to decimal +} + +is( binary_flip(5), 2, 'Example 1' ); +is( binary_flip(4), 3, 'Example 2' ); +is( binary_flip(6), 1, 'Example 3' ); + +done_testing(); diff --git a/challenge-192/lubos-kolouch/perl/ch-2.pl b/challenge-192/lubos-kolouch/perl/ch-2.pl new file mode 100644 index 0000000000..98bec2523b --- /dev/null +++ b/challenge-192/lubos-kolouch/perl/ch-2.pl @@ -0,0 +1,48 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Test::More; + +sub equal_distribution { + my @list = @_; + my $sum = 0; + $sum += $_ for @list; + + return -1 if $sum % @list != 0; # Return -1 if not divisible evenly + + my $target = $sum / @list; + my $moves = 0; + + # Repeat until the distribution is complete + while (1) { + my $done = 1; + + # Distribute the difference to adjacent cells + for my $i ( 0 .. $#list - 1 ) { + if ( $list[$i] < $target ) { + $list[$i]++; + $list[ $i + 1 ]--; + $moves++; + $done = 0; + } + elsif ( $list[$i] > $target ) { + $list[$i]--; + $list[ $i + 1 ]++; + $moves++; + $done = 0; + } + } + + # Break if the distribution is complete + last if $done; + } + + return $moves; +} + +is( equal_distribution( 1, 0, 5 ), 4, 'Example 1' ); +is( equal_distribution( 0, 2, 0 ), -1, 'Example 2' ); +is( equal_distribution( 0, 3, 0 ), 2, 'Example 3' ); + +done_testing(); diff --git a/challenge-192/lubos-kolouch/python/ch-1.py b/challenge-192/lubos-kolouch/python/ch-1.py new file mode 100644 index 0000000000..e35447b77a --- /dev/null +++ b/challenge-192/lubos-kolouch/python/ch-1.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import unittest + + +def binary_flip(n): + binary = bin(n)[2:] # Convert to binary + flipped_binary = binary.translate( + str.maketrans('01', '10')) # Flip the bits + return int(flipped_binary, 2) # Convert back to decimal + + +class TestBinaryFlip(unittest.TestCase): + def test_examples(self): + self.assertEqual(binary_flip(5), 2) + self.assertEqual(binary_flip(4), 3) + self.assertEqual(binary_flip(6), 1) + + +if __name__ == '__main__': + unittest.main() diff --git a/challenge-192/lubos-kolouch/python/ch-2.py b/challenge-192/lubos-kolouch/python/ch-2.py new file mode 100644 index 0000000000..ce61d15e0d --- /dev/null +++ b/challenge-192/lubos-kolouch/python/ch-2.py @@ -0,0 +1,45 @@ +import unittest + + +def equal_distribution(list_): + total_sum = sum(list_) + + if total_sum % len(list_) != 0: + return -1 + + target = total_sum // len(list_) + moves = 0 + + # Repeat until the distribution is complete + while True: + done = True + + # Distribute the difference to adjacent cells + for i in range(len(list_) - 1): + if list_[i] < target: + list_[i] += 1 + list_[i+1] -= 1 + moves += 1 + done = False + elif list_[i] > target: + list_[i] -= 1 + list_[i+1] += 1 + moves += 1 + done = False + + # Break if the distribution is complete + if done: + break + + return moves + + +class TestEqualDistribution(unittest.TestCase): + def test_examples(self): + self.assertEqual(equal_distribution([1, 0, 5]), 4) + self.assertEqual(equal_distribution([0, 2, 0]), -1) + self.assertEqual(equal_distribution([0, 3, 0]), 2) + + +if __name__ == '__main__': + unittest.main() |
