Огнян обнови решението на 02.11.2022 07:59 (преди над 2 години)
+number_to_letter_dict = {
+ 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: [' ', ' ', ' '],
+}
+
+
+letter_to_number_dict = {
+ 'A': [2, 1], 'B': [2, 2], 'C': [2, 3],
+ 'D': [3, 1], 'E': [3, 2], 'F': [3, 3],
+ 'G': [4, 1], 'H': [4, 2], 'I': [4, 3],
+ 'J': [5, 1], 'K': [5, 2], 'L': [5, 3],
+ 'M': [6, 1], 'N': [6, 2], 'O': [6, 3],
+ 'P': [7, 1], 'Q': [7, 2], 'R': [7, 3], 'S': [7, 4],
+ 'T': [8, 1], 'U': [8, 2], 'V': [8, 3],
+ 'W': [9, 1], 'X': [9, 2], 'Y': [9, 3], 'Z': [9, 4],
+ ' ': [0, 1],
+}
+
+
+number_to_angle_dict = {
+ 1: 30, 2: 60, 3: 90, 4: 120, 5: 150,
+ 6: 180, 7: 210, 8: 240, 9: 270, 0: 300,
+}
+
+
+# Make letter from number and number sequence in text.
+def make_letter(number, number_sequence):
+ if number in (7, 9):
+ return number_to_letter_dict[number][number_sequence % 4]
+ else:
+ return number_to_letter_dict[number][number_sequence % 3]
+
+
+# Normalize angle
+def normalize(number):
+ if number < 0:
+ return 360 + number
+ else:
+ return number - 360
+
+
+def nums_to_text(numbers):
+ number_sequence = 0
+ message = ''
+ for index, number in enumerate(numbers):
+ if number == -1:
+ continue
+ if index == len(numbers) - 1 or number != numbers[index + 1]:
+ message += make_letter(number, number_sequence)
+ number_sequence = 0
+ else:
+ number_sequence += 1
+ return message
+
+
+def text_to_nums(text):
+ numbers = []
+ for letter in text:
+ upper_letter = letter.upper()
+ numbers.extend([letter_to_number_dict[upper_letter][0]]
+ * letter_to_number_dict[upper_letter][1])
+ return numbers
+
+
+def nums_to_angle(numbers):
+ angle = 0
+ for number in numbers:
+ angle += number_to_angle_dict[number]
+ return angle % 360
+
+
+def angles_to_nums(angles):
+ numbers = []
+ for angle in angles:
+ if angle < 0 or angle > 359:
+ angle = normalize(angle)
+ if angle > 15 and angle <= 45:
+ numbers.extend([1])
+ elif angle > 45 and angle <= 75:
+ numbers.extend([2])
+ elif angle > 75 and angle <= 105:
+ numbers.extend([3])
+ elif angle > 105 and angle <= 135:
+ numbers.extend([4])
+ elif angle > 135 and angle <= 165:
+ numbers.extend([5])
+ elif angle > 165 and angle <= 195:
+ numbers.extend([6])
+ elif angle > 195 and angle <= 225:
+ numbers.extend([7])
+ elif angle > 225 and angle <= 255:
+ numbers.extend([8])
+ elif angle > 255 and angle <= 285:
+ numbers.extend([9])
+ elif angle > 285 and angle <= 315:
+ numbers.extend([0])
+ else:
+ continue
+ return numbers
+
+
+def is_phone_tastic(word):
+ size = len(word)
+ angle = nums_to_angle(text_to_nums(word))
+ return normalize(angle) % size == 0