Марио обнови решението на 03.11.2022 10:21 (преди над 2 години)
+def nums_to_text(nums):
+
+ key_combinations = {
+ -1: [""],
+ 1: [""],
+ 2: ["A", "B", "C"],
+ 3: ["D", "E", "F"],
+ 4: ["G", "H", "I"],
+ 5: ["J", "K", "L"],
+ 6: ["M", "N", "O"],
+ 7: ["P", "Q", "R", "S"],
+ 8: ["T", "U", "V"],
+ 9: ["W", "X", "Y", "Z"],
+ 0: [" "]
+ }
+
+ result = ""
+
+ current_num = None
+ current_num_counter = 0
+ for num in nums:
+ if current_num is None:
+ current_num = num
+
+ if current_num == num:
+ current_num_counter += 1
+ else:
+ index = (current_num_counter %
+ len(key_combinations[current_num])) - 1
+ result += key_combinations[current_num][index]
+ current_num = num
+ current_num_counter = 1
+
+ index = (current_num_counter % len(key_combinations[current_num])) - 1
+ result += key_combinations[current_num][index]
+
+ return result
+
+
+def text_to_nums(text):
+ text = text.upper()
+ key_combinations = {
+ -1: [""],
+ 1: [""],
+ 2: ["A", "B", "C"],
+ 3: ["D", "E", "F"],
+ 4: ["G", "H", "I"],
+ 5: ["J", "K", "L"],
+ 6: ["M", "N", "O"],
+ 7: ["P", "Q", "R", "S"],
+ 8: ["T", "U", "V"],
+ 9: ["W", "X", "Y", "Z"],
+ 0: [" "]
+ }
+
+ result = []
+ previous_digit = -1
+
+ for letter in text:
+ digit = [key for key, values in key_combinations.items()
+ if letter in values][0]
+ repetition = key_combinations[digit].index(letter) + 1
+
+ if (previous_digit == digit):
+ result.append(-1)
+
+ previous_digit = digit
+ result.extend([digit] * repetition)
+
+ return result
+
+
+def nums_to_angle(nums):
+ result = sum(map(lambda x: 10*30 if x == 0 else x * 30, nums))
+ return result if result < 360 else abs(360 - result)
+
+
+def angles_to_nums(angles):
+ result = []
+
+ for angle in angles:
+ if angle < 0:
+ normalized_angle = abs(360 + angle)
+ if normalized_angle // 30 == 11:
+ continue
+
+ if normalized_angle >= 15 and normalized_angle <= 30:
+ result.append(1)
+ elif normalized_angle > 30 and normalized_angle <= 345:
+ result.append(normalized_angle // 30)
+ else:
+ if angle // 30 == 11:
+ continue
+
+ if angle >= 15 and angle <= 30:
+ result.append(1)
+ elif angle > 30 and angle <= 345:
+ result.append(angle // 30)
+
+ return result
+
+
+def is_phone_tastic(word):
+ result = False
+ if len(word) == 0:
+ return result
+ angle = nums_to_angle(text_to_nums(word))
+ return True if angle % len(word) == 0 else False
Това е същият речник, който използваш в предишната функция. Добре е да го изнесеш извън функциите и да имаш само една дефиниция. Реално погледнато, тук ти трябва по-скоро обратното, за което си направил модификацията на ред 60. Ако просто преправиш този речник, това няма да е нужно.
Моля не слафай скоби в условията на
if
. Виждам, че на другите места няма, така че сигурно просто си пропуснал това, но все пак споделям.Може да греша, но не видах друг човек да дефинира позволените ълги така. Харесва ми.
Не се използва.