Йоан обнови решението на 03.11.2022 00:29 (преди над 2 години)
+nums_to_letters = {
+ "1": "",
+ "2": "A", "22": "B", "222": "C",
+ "3": "D", "33": "E", "333": "F",
+ "4": "G", "44": "H", "444": "I",
+ "5": "J", "55": "K", "555": "L",
+ "6": "M", "66": "N", "666": "O",
+ "7": "P", "77": "Q", "777": "R", "7777": "S",
+ "8": "T", "88": "U", "888": "V",
+ "9": "W", "99": "X", "999": "Y", "9999": "Z",
+ "0": " "
+}
+
+letters_to_nums = {letter: num for num, letter in nums_to_letters.items()}
+
+
+def nums_to_text(nums):
+ text = ""
+ nums = [str(num) for num in nums]
+ prev = nums[0] if nums[0] != '1' else ""
+
+ for num in nums[1:]:
+ if int(num) not in range(-1, 10):
+ continue
+ if num == "-1":
+ if prev:
+ text += nums_to_letters[prev]
+ prev = ""
+ continue
+
+ if prev == "" or (prev[0] == num and num not in "01"):
+ prev += num
+ else:
+ text += nums_to_letters[prev]
+ prev = num
+
+ if len(prev) > 3 and int(prev[0]) in [*range(1, 7), 8]:
+ prev = prev[:len(prev) % 3]
+
+ if len(prev) > 4 and int(prev[0]) in [7, 9]:
+ prev = prev[:len(prev) % 4]
+
+ if prev:
+ text += nums_to_letters[prev]
+ return text
+
+
+def text_to_nums(text):
+ text = text.upper()
+ if not text:
+ return []
+ prev = text[0]
+ nums = list(letters_to_nums[prev])
+
+ for letter in text[1:]:
+ if letters_to_nums[prev][0] in letters_to_nums[letter]:
+ nums.append(-1)
+ nums.extend(list(letters_to_nums[letter]))
+ prev = letter
+ return [int(num) for num in nums]
+
+
+# I am aware that the following is hard to read and generally a bad practice,
+# that being said, I just wanted to have some fun :D
+
+
+def nums_to_angle(nums):
+ return sum([num * 30 if num != 0 else 300 for num in nums if num != -1]) % 360
+
+
+def angles_to_nums(angles):
+ return [(angle + 14) // 30 for angle in [angle % 360 for angle in angles if angle % 360 in range(16, 330)]]
+
+
+def is_phone_tastic(word):
+ return nums_to_angle(text_to_nums(word)) % len(word) == 0 if word else False
<3