aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-11-25 14:33:27 +0000
committerGitHub <noreply@github.com>2022-11-25 14:33:27 +0000
commit59d63310db92cbe88cf41ce30d7499e8a8c4787d (patch)
tree0ab852c2d290f887e5ec3261a794cbd629931f3b
parent453761c9d1332d237fab81e2b807e02a86025712 (diff)
parentf256a96943acef95b679d9abf91bedc977478a5c (diff)
downloadperlweeklychallenge-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.java43
-rw-r--r--challenge-192/vamsi-meenavilli/perl/ch-1.pl37
-rw-r--r--challenge-192/vamsi-meenavilli/perl/ch-2.pl82
-rw-r--r--challenge-192/vamsi-meenavilli/python/ch-1.py23
-rw-r--r--challenge-192/vamsi-meenavilli/python/ch-2.py61
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()