aboutsummaryrefslogtreecommitdiff
path: root/challenge-249/jeanluc2020/python/ch-1.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-249/jeanluc2020/python/ch-1.py')
-rwxr-xr-xchallenge-249/jeanluc2020/python/ch-1.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/challenge-249/jeanluc2020/python/ch-1.py b/challenge-249/jeanluc2020/python/ch-1.py
new file mode 100755
index 0000000000..d187c0ca7d
--- /dev/null
+++ b/challenge-249/jeanluc2020/python/ch-1.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-249/#TASK1
+#
+# Task 1: Shortest Distance
+# =========================
+#
+# You are given an array of integers with even number of elements.
+#
+# Write a script to divide the given array into equal pairs such that:
+#
+# a) Each element belongs to exactly one pair.
+# b) The elements present in a pair are equal.
+#
+#
+## Example 1
+##
+## Input: @ints = (3, 2, 3, 2, 2, 2)
+## Output: (2, 2), (3, 3), (2, 2)
+##
+## There are 6 elements in @ints.
+## They should be divided into 6 / 2 = 3 pairs.
+## @ints is divided into the pairs (2, 2), (3, 3), and (2, 2) satisfying all the
+## conditions.
+#
+## Example 2
+##
+## Input: @ints = (1, 2, 3, 4)
+## Output: ()
+##
+## There is no way to divide @ints 2 pairs such that the pairs satisfy every
+## condition.
+#
+############################################################
+##
+## discussion
+##
+############################################################
+#
+# We use the elements of the array as keys for a hash in which we
+# count the amount of elements of this value in the array.
+# If in the end, all values in the hash are even, we can spit out the
+# correct number of arrays, otherwise we can only return an empty array.
+
+def shortest_distance(ints: list) -> list:
+ print("Input: (", ", ".join([str(x) for x in ints]), ")")
+ result = []
+ map = {}
+ for i in ints:
+ if i in map:
+ map[i] += 1
+ else:
+ map[i] = 1
+ for key in map.keys():
+ if map[key] % 2 != 0:
+ print("Output: ()")
+ return ()
+ i = int( map[key] / 2 )
+ for j in range(1,i+1):
+ result.append( [key, key] )
+ first = True
+ print("Output: ", end="")
+ for elem in result:
+ if first:
+ first = False
+ else:
+ print(", ", end="")
+ print(", ".join([str(x) for x in elem]), end="")
+ print("")
+
+shortest_distance([3, 2, 3, 2, 2, 2])
+shortest_distance([1, 2, 3, 4])
+