Кристияна обнови решението на 01.11.2022 13:19 (преди над 2 години)
+from itertools import groupby
+
+phone_pad_letters = {0: ' ', 1: '', 2: 'ABC', 3: 'DEF',
+ 4: 'GHI', 5: 'JKL', 6: 'MNO',
+ 7: 'PQRS', 8: 'TUV', 9: 'WXYZ'}
+
+letter_to_num = [[2], [2, 2], [2, 2, 2],
+ [3], [3, 3], [3, 3, 3],
+ [4], [4, 4], [4, 4, 4],
+ [5], [5, 5], [5, 5, 5],
+ [6], [6, 6], [6, 6, 6],
+ [7], [7, 7], [7, 7, 7], [7, 7, 7, 7],
+ [8], [8, 8], [8, 8, 8],
+ [9], [9, 9], [9, 9, 9], [9, 9, 9, 9]]
+
+def nums_to_text(nums):
+ sms = ""
+ grouped_nums = group = [list(j) for i, j in groupby(nums)]
+
+ for group in grouped_nums:
+ current_num = group[0]
+ counter = len(group)
+
+ if current_num == 0 or current_num == 1:
+ sms += phone_pad_letters[current_num]
+ elif current_num == -1:
+ continue
+ elif ((current_num >= 2 and current_num <= 6) or current_num == 8):
+ sms += phone_pad_letters[current_num][counter % 3 - 1]
+ elif (current_num == 7 or current_num == 9):
+ sms += phone_pad_letters[current_num][counter % 4 - 1]
+ return str(sms)
+
+def text_to_nums(text):
+ nums = []
+
+ for letter in text.upper():
+ if letter == ' ':
+ nums.append(0)
+ else:
+ index = ord(letter) - ord('A')
+ for i in letter_to_num[index]:
+ nums.append(i)
+ #nums.append(letter_to_num[index])
+
+ #return [int(x) for x in nums]
+ return nums
+
+def nums_to_angle(nums):
+ angles = 0
+
+ for num in nums:
+ if num == 0:
+ angles += 300
+ else:
+ angles += num * 30
+ return angles % 360
+
+def angles_to_nums(angles):
+ numbers = []
+
+ for angle in angles:
+ angle %= 360
+
+ if angle % 30 != 0:
+ if angle % 30 <= 15:
+ angle = angle - angle % 30
+ else:
+ angle = (angle + angle % 30) - ((angle + angle % 30) % 30)
+
+ if angle == 300:
+ numbers.append(0)
+ elif angle != 0 and angle <= 330:
+ numbers.append(angle//30)
+
+ return numbers
+
+def is_phone_tastic(word):
+ transformed_word = nums_to_angle(text_to_nums(word))
+
+ if transformed_word % len(word) == 0:
+ return True
+ else:
+ return False