Ангел обнови решението на 03.11.2022 00:16 (преди над 2 години)
+from collections import OrderedDict
+
+
+dict_nums_to_text = {
+ '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': ' '
+}
+
+dict_digit_to_angle = {
+ 1: 30,
+ 2: 60,
+ 3: 90,
+ 4: 120,
+ 5: 150,
+ 6: 180,
+ 7: 210,
+ 8: 240,
+ 9: 270,
+ 0: 300
+}
+
+digit_letters = {
+ 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: [' '],
+ 1: ['']
+}
+
+dict_text_to_nums = {key: value for value, key in dict_nums_to_text.items()}
+
+dict_angle_to_digit = {key: value for value,
+ key in dict_digit_to_angle.items()}
+
+
+def encode(message):
+ encoded_message = list()
+ i = 0
+
+ while (i <= len(message)-1):
Моля не слагай скоби около условия на if
, while
и подобни.
+ count = 1
+ ch = message[i]
+ j = i
+ while (j < len(message)-1):
+ if (message[j] == message[j+1]):
+ count = count+1
+ if (ch == '7' or ch == '9') and count > 4:
В Python е по-прието ch in ('7', '9')
+ count = 1
+ elif ch != '7' and ch != '9' and count > 3:
+ count = 1
+ j = j+1
+ else:
+ break
+ encoded_message.append((str(count), str(ch)))
+ i = j+1
+ return encoded_message
+
+
+def nums_to_text(nums):
+ result = ""
+ encoded = encode(nums)
+
+ for number, char in encoded:
+ if char == '1' or char == '-1':
+ continue
+ elif char == '0':
+ i = int(number)
+ while (i > 0):
+ result += dict_nums_to_text[char]
+ i -= 1
+ else:
+ code = str(int(number) * char)
+ result += dict_nums_to_text[code]
+
+ return result
+
+
+def text_to_nums(text):
+ if len(text) == 0:
+ return [1]
+
+ result = list()
По-често ще видиш result = []
. Не е проблем и с това, което ти ипозлваш, обаче.
+ prev = ''
+ for letter in text:
+ if prev != '' and digit_letters[int(dict_text_to_nums[prev.upper()][-1])] == digit_letters[int(dict_text_to_nums[letter.upper()][-1])]:
+ result.append(-1)
+ number = dict_text_to_nums[letter.upper()]
+ for digit in number:
+ result.append(int(digit))
+ prev = letter
+ return result
+
+
+def nums_to_angle(nums):
+ sum = 0
+ for digit in nums:
+ if digit == -1:
+ continue
+ sum += dict_digit_to_angle[digit]
+
+ while sum >= 360:
+ sum -= 360
+
+ return sum
+
+
+def myround(x, base=30):
+ return base * round(x/base)
+
+
+def angles_to_nums(angles):
+ result = list()
По-скоро ще срещнеш result = []
. Твоето също работи, разбира се.
+
+ for angle in angles:
+ if angle < 0:
+ angle = abs(360 + angle)
+ elif angle > 360:
+ angle = angle - 360
+
+ angle = myround(angle)
+ if angle == 0:
+ continue
+
+ if angle in dict_angle_to_digit:
+ result.append(dict_angle_to_digit[angle])
+
+ return result
+
+
+def is_phone_tastic(text):
+ nums = text_to_nums(text)
+ angle = nums_to_angle(nums)
+
+ return angle % len(text) == 0
Моля не слагай скоби около условия на
if
,while
и подобни.В Python е по-прието
ch in ('7', '9')
По-често ще видиш
result = []
. Не е проблем и с това, което ти ипозлваш, обаче.По-скоро ще срещнеш
result = []
. Твоето също работи, разбира се.