diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-11-25 14:33:27 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-25 14:33:27 +0000 |
| commit | 59d63310db92cbe88cf41ce30d7499e8a8c4787d (patch) | |
| tree | 0ab852c2d290f887e5ec3261a794cbd629931f3b | |
| parent | 453761c9d1332d237fab81e2b807e02a86025712 (diff) | |
| parent | f256a96943acef95b679d9abf91bedc977478a5c (diff) | |
| download | perlweeklychallenge-club-59d63310db92cbe88cf41ce30d7499e8a8c4787d.tar.gz perlweeklychallenge-club-59d63310db92cbe88cf41ce30d7499e8a8c4787d.tar.bz2 perlweeklychallenge-club-59d63310db92cbe88cf41ce30d7499e8a8c4787d.zip | |
Merge pull request #7149 from vamsi-meenavilli/vamsi-challenge-192
weekly challenge 192 solutions in perl, python and java
| -rw-r--r-- | challenge-192/vamsi-meenavilli/java/ch_1.java | 43 | ||||
| -rw-r--r-- | challenge-192/vamsi-meenavilli/perl/ch-1.pl | 37 | ||||
| -rw-r--r-- | challenge-192/vamsi-meenavilli/perl/ch-2.pl | 82 | ||||
| -rw-r--r-- | challenge-192/vamsi-meenavilli/python/ch-1.py | 23 | ||||
| -rw-r--r-- | challenge-192/vamsi-meenavilli/python/ch-2.py | 61 |
5 files changed, 246 insertions, 0 deletions
diff --git a/challenge-192/vamsi-meenavilli/java/ch_1.java b/challenge-192/vamsi-meenavilli/java/ch_1.java new file mode 100644 index 0000000000..cf31964680 --- /dev/null +++ b/challenge-192/vamsi-meenavilli/java/ch_1.java @@ -0,0 +1,43 @@ +import org.junit.jupiter.api.Test; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/* +Week 192: + + https://theweeklychallenge.org/blog/perl-weekly-challenge-192 + + Task 1: Binary Flip + You are given a positive integer, $n. + Write a script to find the binary flip. + +*/ +public class main { + public static Map<Character, Character> binaryNumberMap = new HashMap(); + + static { + binaryNumberMap.put('0', '1'); + binaryNumberMap.put('1', '0'); + } + + public static void main(String[] args) {} + + public static Integer binaryFlip(Integer number) { + var flippedBinaryNumber = new StringBuilder(); + + for (char c : Integer.toBinaryString(number).toCharArray()) { + flippedBinaryNumber.append(binaryNumberMap.get(c)); + } + + return Integer.parseInt(flippedBinaryNumber.toString(), 2); + } + + @Test + public void binaryFlipTest() { + assertEquals(binaryFlip(5), 2, "Example 1 Failed."); + assertEquals(binaryFlip(4), 3, "Example 2 Failed."); + assertEquals(binaryFlip(6), 1, "Example 3 Failed."); + } +} diff --git a/challenge-192/vamsi-meenavilli/perl/ch-1.pl b/challenge-192/vamsi-meenavilli/perl/ch-1.pl new file mode 100644 index 0000000000..6e1d781428 --- /dev/null +++ b/challenge-192/vamsi-meenavilli/perl/ch-1.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test2::V0; + +=head1 AUTHORS + +Vamsi Meenavilli + +=head1 DESCRIPTION + + https://theweeklychallenge.org/blog/perl-weekly-challenge-192 + + Task 1: Binary Flip + You are given a positive integer, $n. + Write a script to find the binary flip. + +=cut + +is(binaryFlip(5), 2, 'Example 1'); +is(binaryFlip(4), 3, 'Example 2'); +is(binaryFlip(6), 1, 'Example 3'); + +sub binaryFlip { + my ($number) = @_; + + my %binaryDigitFlipMap = ( + '0' => '1', + '1' => '0' + ); + + return oct("0b" . join("", map { $binaryDigitFlipMap{$_} } split(//, sprintf("%b", $number)))); +} + +done_testing(); diff --git a/challenge-192/vamsi-meenavilli/perl/ch-2.pl b/challenge-192/vamsi-meenavilli/perl/ch-2.pl new file mode 100644 index 0000000000..8055eba515 --- /dev/null +++ b/challenge-192/vamsi-meenavilli/perl/ch-2.pl @@ -0,0 +1,82 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use List::Util qw/sum uniq/; +use Test2::V0; + +=head1 AUTHORS + +Vamsi Meenavilli + +=head1 DESCRIPTION + + https://theweeklychallenge.org/blog/perl-weekly-challenge-192 + + Task 1: Equal Distribution + Submitted by: Mohammad S Anwar + You are given a list of integers greater than or equal to zero, @list. + + Write a script to distribute the number so that each members are same. If you succeed then print the total moves otherwise print -1. + + Please follow the rules (as suggested by Neils van Dijke [2022-11-21 13:00] + + 1) You can only move a value of '1' per move + 2) You are only allowed to move a value of '1' to a direct neighbor/adjacent cell + +=cut + +is(equalDistribution([1, 0, 5]), 4, 'Example 1'); +is(equalDistribution([0, 2, 0]), -1, 'Example 2'); +is(equalDistribution([0, 3, 0]), 2, 'Example 3'); + +sub equalDistribution { + my ($numbers_list) = @_; + + my $number_list_size = scalar(@$numbers_list); + my $moves = 0; + + if (sum(@$numbers_list) % $number_list_size == 0) { + while (scalar(uniq @$numbers_list) != 1) { + my ($max_number_index) = getMaxNumberIndex($numbers_list, $number_list_size); + my $before_max_number_index = $max_number_index - 1; + my $after_max_number_index = $max_number_index + 1; + + if ( + $after_max_number_index >= $number_list_size + || $numbers_list->[$before_max_number_index] <= $numbers_list->[$after_max_number_index] + ) { + $numbers_list->[$before_max_number_index] += 1; + } + else { + $numbers_list->[$after_max_number_index] += 1 + } + + $numbers_list->[$max_number_index] -= 1; + $moves += 1; + } + } + else { + $moves = -1; + } + + return($moves); +} + +sub getMaxNumberIndex { + my ($numbers_list, $numbers_list_size) = @_; + + my ($max_number, $max_number_index) = (0, 0); + + for (my $i = 0; $i < $numbers_list_size; $i++) { + if ($numbers_list->[$i] > $max_number) { + $max_number = $numbers_list->[$i]; + $max_number_index = $i; + } + } + + return($max_number_index); +} + +done_testing(); diff --git a/challenge-192/vamsi-meenavilli/python/ch-1.py b/challenge-192/vamsi-meenavilli/python/ch-1.py new file mode 100644 index 0000000000..fd449a1e02 --- /dev/null +++ b/challenge-192/vamsi-meenavilli/python/ch-1.py @@ -0,0 +1,23 @@ +""" + Week 192: + + https://theweeklychallenge.org/blog/perl-weekly-challenge-192 + + Task 1: Binary Flip + You are given a positive integer, $n. + Write a script to find the binary flip. +""" + +binaryNumberFlipMap = {'0': '1', '1': '0'} + + +def getBinarFlip(number): + return int(''.join([binaryNumberFlipMap[i] for i in bin(number)[2:]]), 2) + + +def getBinarFlipTest(): + assert getBinarFlip(5) == 2, 'Exaple 1 Failed' + assert getBinarFlip(4) == 3, 'Exaple 1 Failed' + assert getBinarFlip(6) == 1, 'Exaple 1 Failed' + +getBinarFlipTest() diff --git a/challenge-192/vamsi-meenavilli/python/ch-2.py b/challenge-192/vamsi-meenavilli/python/ch-2.py new file mode 100644 index 0000000000..9f8676f293 --- /dev/null +++ b/challenge-192/vamsi-meenavilli/python/ch-2.py @@ -0,0 +1,61 @@ +""" +Week 192: + +https://theweeklychallenge.org/blog/perl-weekly-challenge-192 + +Task 1: Equal Distribution +Submitted by: Mohammad S Anwar +You are given a list of integers greater than or equal to zero, @list. + +Write a script to distribute the number so that each members are same. If you succeed then print the total moves otherwise print -1. + +Please follow the rules (as suggested by Neils van Dijke [2022-11-21 13:00] + +1) You can only move a value of '1' per move +2) You are only allowed to move a value of '1' to a direct neighbor/adjacent cell +""" + + +def equalDistributionMoves(numbers_list: list) -> int: + numbers_list_size = len(numbers_list) + moves = 0 + + if sum(numbers_list) % numbers_list_size == 0: + while len(set(numbers_list)) != 1: + max_number_index = getMaxNumberIndex(numbers_list) + before_max_number_index = max_number_index - 1 + after_max_number_index = max_number_index + 1 + + if after_max_number_index >= numbers_list_size or numbers_list[before_max_number_index] <= numbers_list[ + after_max_number_index]: + numbers_list[before_max_number_index] += 1 + else: + numbers_list[after_max_number_index] += 1 + + numbers_list[max_number_index] -= 1 + moves += 1 + else: + moves = -1 + + return moves + + +def getMaxNumberIndex(numbers_list: list) -> int: + max_number = 0 + max_number_index = 0 + + for index, number in enumerate(numbers_list): + if number > max_number: + max_number = number + max_number_index = index + + return max_number_index + + +def equalDistributionMovesTest() -> None: + assert equalDistributionMoves([1, 0, 5]) == 4, 'Example 1 Failed' + assert equalDistributionMoves([0, 2, 0]) == -1, 'Example 2 Failed' + assert equalDistributionMoves([0, 3, 0]) == 2, 'Example 3 Failed' + + +equalDistributionMovesTest() |
