diff options
Diffstat (limited to 'challenge-249/jeanluc2020/python')
| -rwxr-xr-x | challenge-249/jeanluc2020/python/ch-1.py | 72 | ||||
| -rwxr-xr-x | challenge-249/jeanluc2020/python/ch-2.py | 59 |
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"); + |
