Веселина обнови решението на 03.11.2022 01:13 (преди над 2 години)
+num_to_letter = {(2, 1): 'A', (2, 2): 'B', (2, 0): 'C', (3, 1): 'D', (3, 2): 'E', (3, 0): 'F', (4, 1): 'G', (4, 2): 'H',
+ (4, 0): 'I', (5, 1): 'J', (5, 2): 'K', (5, 0): 'L', (6, 1): 'M', (6, 2): 'N', (6, 0): 'O', (7, 1): 'P',
+ (7, 2): 'Q', (7, 3): 'R', (7, 0): 'S', (8, 1): 'T', (8, 2): 'U', (8, 0): 'V', (9, 1): 'W', (9, 2): 'X',
+ (9, 3): 'Y', (9, 0): 'Z', (0, 1): ' '}
+letter_to_num = {}
+for key in num_to_letter:
+ val = num_to_letter[key]
+ letter_to_num[val] = key
+
+
+def nums_to_text(nums):
+ word = ''
+ digit = -2
+ count = 0
+ for i in nums:
+ if i == digit:
+ count += 1
+ else:
+ if count == 0:
+ digit = i
+ count += 1
+ else:
+ if digit == 7 or digit == 9:
+ count %= 4
+ elif digit == 0:
+ count = 1
+ else:
+ count %= 3
+ if digit != -1 and digit != 1:
+ word += num_to_letter[(digit, count)]
+ count = 1
+ digit = i
+ if digit == 7 or digit == 9:
+ count %= 4
+ elif digit == 0:
+ count = 1
+ else:
+ count %= 3
+ if digit != -1 and digit != 1:
+ word += num_to_letter[(digit, count)]
+ return word
+
+
+def text_to_nums(text):
+ text = text.upper()
+ list_of_nums = []
+ previous_digit = -2
+ for letter in text:
+ digit, count = letter_to_num[letter]
+ if count == 0:
+ if digit == 7 or digit == 9:
+ count = 4
+ else:
+ count = 3
+ if digit == previous_digit:
+ list_of_nums.append(-1)
+ previous_digit = digit
+ while count != 0:
+ list_of_nums.append(digit)
+ count -= 1
+ return list_of_nums
+
+
+def nums_to_angle(nums):
+ sum_of_angles = 0
+ for digit in nums:
+ sum_of_angles += (digit * 30)
+ sum_of_angles %= 360
+ return sum_of_angles
+
+
+def angles_to_nums(angles):
+ nums = []
+ for angle in angles:
+ angle %= 360
+ if angle % 30 <= 15:
+ angle -= (angle % 30)
+ else:
+ angle = angle - (angle % 30) + 30
+ if angle == 360:
+ angle = 0
+ if angle == 0 or angle == 330:
+ continue
+ else:
+ nums.append(angle//30)
+ return nums
+
+
+def is_phone_tastic(word):
+ nums_list = text_to_nums(word)
+ angle = nums_to_angle(nums_list)
+ if len(word) == 0:
+ return False
+ if angle % len(word) == 0:
+ return True
+ else:
+ return False
+
'letter_to_num = {v: k, for k, v in nums_to_letter.items()}'
В Python е по-прието
digit in (7, 9)
. По-кратко, по-лесно...Слагай интервали около
//
и други аритметични оператори.