Никола обнови решението на 30.10.2022 01:35 (преди над 2 години)
+def nums_to_text(nums):
+ mobile_keyboard = {
+ 2: 'abc',
+ 3: 'def',
+ 4: 'ghi',
+ 5: 'jkl',
+ 6: 'mno',
+ 7: 'pqrs',
+ 8: 'tuv',
+ 9: 'wxyz',
+ }
+
+ text = ''
+ index = -1
+ while index + 1 < len(nums):
+ index += 1
+ if abs(nums[index]) == 1:
+ continue
+
+ if nums[index] == 0:
+ text += ' '
+ continue
+
+ count_number = 0
+ while index + 1 < len(nums) and nums[index] == nums[index + 1]:
+ index += 1
+ count_number += 1
+
+ text += mobile_keyboard[nums[index]][count_number % len(mobile_keyboard[nums[index]])]
+
+ return text
+
+
+def text_to_nums(text):
+ character_to_numbers = {
+ '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),
+ }
+
+ nums = []
+ for char in text:
+ if char == ' ':
+ nums.append(0)
+ continue
+
+ char = char.lower()
+ number, times_repeated = character_to_numbers[char]
+ if len(nums) > 0 and nums[-1] == number:
+ nums.append(-1)
+ nums += [number] * times_repeated
+
+ return nums
+
+
+def nums_to_angle(nums):
+ angle = 0
+ for number in nums:
+ if number < 0:
+ continue
+
+ if number == 0:
+ number += 10
+
+ angle = (angle + 30 * number) % 360
+
+ return angle
+
+
+def angles_to_nums(angles):
+ numbers = []
+
+ for angle in angles:
+ angle %= 360
+ if angle > 315 or angle <= 15:
Една идея, без да твърдя, че е по-добре, но искам да споделя, че в Python е възможно:
if not 15 < angle <= 315:
+ continue
+
+ def rounding_angle(number):
+ remainder = number % 30
+ quotient = number // 30
+ return (quotient + 1) * 30 if remainder > 15 else quotient * 30
+
+ rounded_angle = rounding_angle(angle)
+ numbers.append((rounded_angle // 30) % 10)
+
+ return numbers
+
+
+def is_phone_tastic(word):
+ return not nums_to_angle(text_to_nums(word)) % len(word)
Добро решение.
На някои места ми дойде в повече натрупана функционалност и бих те посъветвал да обърнеш внимание за следващи проекти (не е нужно да адресираш сега). Ние се шегуваме с решения от един ред, но сме напълно наясно, че те са нечетими и неприложими в реалния живот.
Например:
mobile_keyboard[nums[index]][count_number % len(mobile_keyboard[nums[index]])]