Тодор обнови решението на 30.10.2022 12:30 (преди над 2 години)
+numbersToLetter = {0: ' ',
+ 2: 'ABC',
+ 3: 'DEF',
+ 4: 'GHI',
+ 5: 'JKL',
+ 6: 'MNO',
+ 7: 'PQRS',
+ 8: 'TUV',
+ 9: 'WXYZ'}
+
+letterToNumbers = {' ': [0],
Използвай snake_case
за имена на променливи.
Свикнал съм от Java, но ще се постарая за другия път :)
+ 'A': [2], 'B': [2, 2], 'C': [2, 2, 2],
+ 'D': [3], 'E': [3, 3], 'F': [3, 3, 3],
+ 'G': [4], 'H': [4, 4], 'I': [4, 4, 4],
+ 'J': [5], 'K': [5, 5], 'L': [5, 5, 5],
+ 'M': [6], 'N': [6, 6], 'O': [6, 6, 6],
+ 'P': [7], 'Q': [7, 7], 'R': [7, 7, 7], 'S': [7, 7, 7, 7],
+ 'T': [8], 'U': [8, 8], 'V': [8, 8, 8],
+ 'W': [9], 'X': [9, 9], 'Y': [9, 9, 9], 'Z': [9, 9, 9, 9]}
+
+# 1
+def nums_to_text(nums):
+ def get_letter(digit, count):
+ letters = numbersToLetter.get(digit)
+ if letters is not None:
+ count = (count - 1) % len(letters)
+ return letters[count]
+ return ''
+
+ if len(nums) == 0:
+ return ''
+ result = ''
+ digit = nums[0]
+ count = 1
+ for num in nums[1:]:
+ if digit != num:
+ result += get_letter(digit, count)
+ digit = num
+ count = 1
+ else:
+ count += 1
+ result += get_letter(digit, count)
+ return result
+
+# 2
+def text_to_nums(text):
+ result = []
+ for letter in text.upper():
+ nums = letterToNumbers.get(letter)
+ if len(result) != 0 and nums is not None and result[-1] == nums[0]:
+ result.extend([-1])
result.append(-1)
е същото. Няма нужда да използваш extend
, ако ще добавяш един елемент.
+ result.extend(nums)
+ return result
+
+def normalize(angle):
+ angle %= 360
+ if angle < 0:
+ angle += 360
+ return angle
+
+def round(angle):
+ if angle > 345:
+ return 0
+ n = angle % 30
+ if n <= 15:
+ return angle - n
+ else:
+ return angle + (30 - n)
+
+# 3
+def nums_to_angle(nums):
+ total = 0
+ for num in nums:
+ if num == 0:
Това ми се струва като хак, с който се справяш с гранична стойност. Може да греша, но ми изглежда изкуствено.
+ num = 10
+ total += num
+ return (total * 30) % 360
+
+# 4
+def angles_to_nums(angles):
+ result = []
+ for angle in angles:
+ angle = round(normalize(angle))
+ if angle == 300:
+ result.extend([0])
+ elif angle != 0 and angle != 330:
+ result.extend([int(angle / 30)])
+ return result
+
+# 5
+def is_phone_tastic(word):
+ nums = text_to_nums(word)
+ angle = nums_to_angle(nums)
+ return angle % len(word) == 0
Добро решение.
Оставих няколко дребни коментара, но като цяло нивото е добро.
Благодаря за бързата обратна връзка!
Това ми се струва като хак, с който се справяш с гранична стойност. Може да греша, но ми изглежда изкуствено.