aboutsummaryrefslogtreecommitdiff
path: root/challenge-249/jeanluc2020/python
diff options
context:
space:
mode:
authorLuis Mochan <mochan@fis.unam.mx>2023-12-27 14:57:27 -0600
committerLuis Mochan <mochan@fis.unam.mx>2023-12-27 14:57:27 -0600
commitf9c88dbbb1e13bfb63f40d0dd3b8630850655d7b (patch)
treecb922fb2f44a7ec7bd10cd13b3db9eb2d4fd14b5 /challenge-249/jeanluc2020/python
parent23f378718ed93b9b8d9e51fe18f07a55f61dc9c1 (diff)
parent4ece120b2f4c7b25b00eaad66524fb5d99fa58c3 (diff)
downloadperlweeklychallenge-club-f9c88dbbb1e13bfb63f40d0dd3b8630850655d7b.tar.gz
perlweeklychallenge-club-f9c88dbbb1e13bfb63f40d0dd3b8630850655d7b.tar.bz2
perlweeklychallenge-club-f9c88dbbb1e13bfb63f40d0dd3b8630850655d7b.zip
Merge branch 'master' of github.com:manwar/perlweeklychallenge-club into challenges
Diffstat (limited to 'challenge-249/jeanluc2020/python')
-rwxr-xr-xchallenge-249/jeanluc2020/python/ch-1.py72
-rwxr-xr-xchallenge-249/jeanluc2020/python/ch-2.py59
2 files changed, 131 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])
+
diff --git a/challenge-249/jeanluc2020/python/ch-2.py b/challenge-249/jeanluc2020/python/ch-2.py
new file mode 100755
index 0000000000..504e70a26d
--- /dev/null
+++ b/challenge-249/jeanluc2020/python/ch-2.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-249/#TASK2
+#
+# Task 2: DI String Match
+# =======================
+#
+# You are given a string s, consisting of only the characters "D" and "I".
+#
+# Find a permutation of the integers [0 .. length(s)] such that for each
+# character s[i] in the string:
+#
+# s[i] == 'I' ⇒ perm[i] < perm[i + 1]
+# s[i] == 'D' ⇒ perm[i] > perm[i + 1]
+#
+## Example 1
+##
+## Input: $str = "IDID"
+## Output: (0, 4, 1, 3, 2)
+#
+## Example 2
+##
+## Input: $str = "III"
+## Output: (0, 1, 2, 3)
+#
+## Example 3
+##
+## Input: $str = "DDI"
+## Output: (3, 2, 0, 1)
+#
+############################################################
+##
+## discussion
+##
+############################################################
+#
+# We just count from 0 to length(s) for each "I" and from
+# length(s) to 0 for each "D", and in the end add the last
+# element we didn't use up yet.
+
+def DI_string_match(string: str) -> list:
+ print("Input: '", string, "'", sep="")
+ upper = len(string)
+ lower = 0
+ result = []
+ for char in list(string):
+ if char == "I":
+ result.append(lower)
+ lower += 1
+ else:
+ result.append(upper)
+ upper -= 1
+ result.append(lower)
+ print("Output: (", ", ".join([str(x) for x in result]), ")")
+ return result
+
+DI_string_match("IDID");
+DI_string_match("III");
+DI_string_match("DDI");
+