Решение на Телефонна любов от Николета Бейска

Обратно към всички решения

Към профила на Николета Бейска

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 37 успешни тест(а)
  • 0 неуспешни тест(а)

Код

phone_dictionary = {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"]}
def nums_to_text(nums):
counter = 0
result_string = ""
for i in range(len(nums)):
if nums[i] in (-1, 1):
continue
elif nums[i] == 0:
result_string += " "
elif i+1 < len(nums) and nums[i] == nums[i+1]:
counter += 1
else:
if nums[i] == 7 or nums[i] == 9:
if counter >= 4:
counter = counter % 4
else:
if counter >= 3:
counter = counter % 3
result_string += phone_dictionary[nums[i]][counter]
counter = 0
return result_string
def text_to_nums(text):
nums = []
value = 0
count = 0
for character in text:
new_character = character.upper()
match new_character:
case "A" | "B" | "C":
if value == 2:
nums.append(-1)
value = 2
count = phone_dictionary[2].index(new_character) + 1
case "D" | "E" | "F":
if value == 3:
nums.append(-1)
value = 3
count = phone_dictionary[3].index(new_character) + 1
case "G" | "H" | "I":
if value == 4:
nums.append(-1)
value = 4
count = phone_dictionary[4].index(new_character) + 1
case "J" | "K" | "L":
if value == 5:
nums.append(-1)
value = 5
count = phone_dictionary[5].index(new_character) + 1
case "M" | "N" | "O":
if value == 6:
nums.append(-1)
value = 6
count = phone_dictionary[6].index(new_character) + 1
case "P" | "Q" | "R" | "S":
if value == 7:
nums.append(-1)
value = 7
count = phone_dictionary[7].index(new_character) + 1
case "T" | "U" | "V":
if value == 8:
nums.append(-1)
value = 8
count = phone_dictionary[8].index(new_character) + 1
case "W" | "X" | "Y" | "Z":
if value == 9:
nums.append(-1)
value = 9
count = phone_dictionary[9].index(new_character) + 1
case " ":
value = 0
count = 1
for i in range(count):
nums.append(value)
return nums
def nums_to_angle(nums):
sum_angles = 0
for i in nums:
if i == 0:
sum_angles += 10*30
else:
sum_angles += i*30
if sum_angles > 359:
sum_angles = sum_angles % 360
return sum_angles
def angles_to_nums(angles):
nums = []
to_append = 0
for angle in angles:
if angle > 359 or angle < -359:
angle = angle % 360
if angle < 0:
angle = 360 + angle
if 15 < angle <= 30:
nums.append(1)
elif 30 < angle < 316:
if angle % 30 == 0:
if angle/30 == 10:
nums.append(0)
else:
nums.append(int(angle/30))
else:
if angle % 30 <= 15:
to_append = int(angle//30)
else:
to_append = int(angle//30)+1
if to_append < 10:
nums.append(to_append)
else:
nums.append(0)
return nums
def is_phone_tastic(word):
nums = text_to_nums(word)
angle = nums_to_angle(nums)
if len(word) == 0:
return False
return angle % len(word) == 0

Лог от изпълнението

.....................................
----------------------------------------------------------------------
Ran 37 tests in 0.311s

OK

История (1 версия и 3 коментара)

Николета обнови решението на 03.11.2022 16:29 (преди над 1 година)

+phone_dictionary = {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"]}
+
+
+def nums_to_text(nums):
+ counter = 0
+ result_string = ""
+ for i in range(len(nums)):
+ if nums[i] in (-1, 1):
+ continue
+ elif nums[i] == 0:
+ result_string += " "
+ elif i+1 < len(nums) and nums[i] == nums[i+1]:
+ counter += 1
+ else:
+ if nums[i] == 7 or nums[i] == 9:
+ if counter >= 4:
+ counter = counter % 4
+ else:
+ if counter >= 3:
+ counter = counter % 3
+
+ result_string += phone_dictionary[nums[i]][counter]
+ counter = 0
+
+ return result_string
+
+
+def text_to_nums(text):
+ nums = []
+ value = 0
+ count = 0
+ for character in text:
+ new_character = character.upper()
+ match new_character:
+ case "A" | "B" | "C":
+ if value == 2:
+ nums.append(-1)
+ value = 2
+ count = phone_dictionary[2].index(new_character) + 1
+ case "D" | "E" | "F":
+ if value == 3:
+ nums.append(-1)
+ value = 3
+ count = phone_dictionary[3].index(new_character) + 1
+ case "G" | "H" | "I":
+ if value == 4:
+ nums.append(-1)
+ value = 4
+ count = phone_dictionary[4].index(new_character) + 1
+ case "J" | "K" | "L":
+ if value == 5:
+ nums.append(-1)
+ value = 5
+ count = phone_dictionary[5].index(new_character) + 1
+ case "M" | "N" | "O":
+ if value == 6:
+ nums.append(-1)
+ value = 6
+ count = phone_dictionary[6].index(new_character) + 1
+ case "P" | "Q" | "R" | "S":
+ if value == 7:
+ nums.append(-1)
+ value = 7
+ count = phone_dictionary[7].index(new_character) + 1
+ case "T" | "U" | "V":
+ if value == 8:
+ nums.append(-1)
+ value = 8
+ count = phone_dictionary[8].index(new_character) + 1
+ case "W" | "X" | "Y" | "Z":
+ if value == 9:
+ nums.append(-1)
+ value = 9
+ count = phone_dictionary[9].index(new_character) + 1
+ case " ":
+ value = 0
+ count = 1
+
+ for i in range(count):
+ nums.append(value)
+
+ return nums
+
+
+def nums_to_angle(nums):
+ sum_angles = 0
+ for i in nums:
+ if i == 0:
+ sum_angles += 10*30
+ else:
+ sum_angles += i*30
+
+ if sum_angles > 359:
+ sum_angles = sum_angles % 360
+
+ return sum_angles
+
+
+def angles_to_nums(angles):
+ nums = []
+ to_append = 0
+ for angle in angles:
+ if angle > 359 or angle < -359:
+ angle = angle % 360
+ if angle < 0:
+ angle = 360 + angle
+ if 15 < angle <= 30:
+ nums.append(1)
+ elif 30 < angle < 316:
+ if angle % 30 == 0:
+ if angle/30 == 10:
+ nums.append(0)
+ else:
+ nums.append(int(angle/30))
+ else:
+ if angle % 30 <= 15:
+ to_append = int(angle//30)
+ else:
+ to_append = int(angle//30)+1
+
+ if to_append < 10:
+ nums.append(to_append)
+ else:
+ nums.append(0)
+ return nums
+
+
+def is_phone_tastic(word):
+ nums = text_to_nums(word)
+ angle = nums_to_angle(nums)
+ if len(word) == 0:
+ return False
+ return angle % len(word) == 0
+