Решение на Телефонна любов от Мариян Христов

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

Към профила на Мариян Христов

Резултати

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

Код

phone_keyboard = ((' ',), ('',), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
('M', 'N', 'O'), ('P', 'Q', 'R', 'S'), ('T', 'U', 'V'), ('W', 'X', 'Y', 'Z'))
def group_nums(nums):
last_number = 0
separated_list = []
sub_list = []
for i, number in enumerate(nums):
if i == 0 or number == last_number:
sub_list.append(number)
else:
separated_list.append(sub_list)
sub_list = []
sub_list.append(number)
last_number = number
if not sub_list == []:
separated_list.append(sub_list)
return separated_list
def nums_to_text(nums):
text = ""
separated_list = group_nums(nums)
for list in separated_list:
number = list[0]
if not number == -1:
responding_letter = len(list) % len(phone_keyboard[number]) - 1
text += phone_keyboard[number][responding_letter]
return text
def text_to_nums(text):
text_upper = text.upper()
nums = []
for character in text_upper:
for l in range(10):
for j, __ in enumerate(phone_keyboard[l]):
if character == phone_keyboard[l][j]:
if len(nums) > 0 and nums[len(nums) - 1] == l:
nums.append(-1)
for __ in range(j + 1):

nums.extend([l] * (j + 1)) прави същото.

  • Може да съм оплескал променливите, но използваш променливи с една буква и ми е трудно да разбера коя за какво е - слагай по-описателни имена.
nums.append(l)
break
return nums
angle_conversions = ((286, 315), (16, 45), (46, 75), (76, 105), (106, 135),

Можеш да дефинираш това в някаква логика с няколко реда код, за да избегнеш евентуални грешки при въвеждане, както и да направиш кода по-лесен за промяна.

(136, 165), (166, 195), (196, 225), (226, 255), (256, 285))
def normalize_angle(angle):
if (angle < 0):
while (angle < 0):
angle += 360
elif (angle > 360):
while (angle > 360):
angle -= 360
return angle
def nums_to_angle(nums):
angle = 0
for num in nums:
angle += int(sum(list((angle_conversions[num]))) / 2)
return normalize_angle(angle)
def angles_to_nums(angles):
nums = []
for angle in angles:
for j in range(10):
if normalize_angle(angle) in range(angle_conversions[j][0], angle_conversions[j][1] + 1):
nums.append(j)
break
return nums
def is_phone_tastic(word):
return len(word) != 0 and normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0

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

.................F...................
======================================================================
FAIL: test_normalizing_for_top_boundary (test.TestNumsToAngles)
Test normalizing when the sum is full circle.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/storage/deedee/data/rails/pyfmi-2022/releases/20221020151654/lib/language/python/runner.py", line 67, in thread
    raise result
AssertionError: 360 != 0

----------------------------------------------------------------------
Ran 37 tests in 0.440s

FAILED (failures=1)

История (6 версии и 4 коментара)

Мариян обнови решението на 02.11.2022 20:20 (преди над 1 година)

+phone_keyboard = ((' '), (), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
+ ('M', 'N', 'O'), ('P', 'Q', 'R', 'S'), ('T', 'U', 'V'), ('W', 'X', 'Y', 'Z'))
+
+
+def group_nums(nums):
+ last_number = 0
+ separated_list = []
+ sub_list = []
+ for i, number in enumerate(nums):
+ if i == 0 or number == last_number:
+ sub_list.append(number)
+ else:
+ separated_list.append(sub_list)
+ sub_list = []
+ sub_list.append(number)
+ last_number = number
+
+ if not sub_list == []:
+ separated_list.append(sub_list)
+
+ return separated_list
+
+
+def nums_to_text(nums):
+ text = ""
+
+ separated_list = group_nums(nums)
+ for list in separated_list:
+ number = list[0]
+ if number in (-1, 1):
+ continue
+ else:
+ responding_letter = len(list) % len(phone_keyboard[number]) - 1
+ text += phone_keyboard[number][responding_letter]
+ return text
+
+
+def text_to_nums(text):
+ text_upper = text.upper()
+ nums = []
+
+ for i, character in enumerate(text_upper):
+ for l in range(10):
+ for j, __ in enumerate(phone_keyboard[l]):
+ if character in (phone_keyboard[l][j]):
+ if (len(nums) > 0 and nums[len(nums)-1] == l):
+ nums.append(-1)
+ for k in range(j+1):
+ nums.append(l)
+ break
+
+ return nums
+
+
+angle_conversions = [(286, 315), (16, 45), (46, 75), (76, 105), (106, 135),
+ (136, 165), (166, 195), (196, 225), (226, 255), (256, 285)]
+
+
+def normalize_angle(angle):
+ if (angle < 0):
+ while(angle < 0):
+ angle += 360
+ elif (angle > 360):
+ while(angle > 360):
+ angle -= 360
+
+ return angle
+
+
+def nums_to_angle(nums):
+ angle = 0
+ for num in nums:
+ angle += int((angle_conversions[num][0]
+ + angle_conversions[num][1]) / 2)
+ return normalize_angle(angle)
+
+
+def angles_to_nums(angles):
+ nums = []
+ for angle in angles:
+ for j in range(0, 9):
+ if angle_conversions[j][0] <= normalize_angle(angle) <= angle_conversions[j][1]:
+ nums.append(j)
+ break
+ return nums
+
+
+def is_phone_tastic(word):
+ return normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0
+

Мариян обнови решението на 02.11.2022 21:03 (преди над 1 година)

phone_keyboard = ((' '), (), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
('M', 'N', 'O'), ('P', 'Q', 'R', 'S'), ('T', 'U', 'V'), ('W', 'X', 'Y', 'Z'))
def group_nums(nums):
last_number = 0
separated_list = []
sub_list = []
for i, number in enumerate(nums):
if i == 0 or number == last_number:
sub_list.append(number)
else:
separated_list.append(sub_list)
sub_list = []
sub_list.append(number)
last_number = number
if not sub_list == []:
separated_list.append(sub_list)
-
return separated_list
def nums_to_text(nums):
text = ""
separated_list = group_nums(nums)
for list in separated_list:
number = list[0]
if number in (-1, 1):
continue
else:
responding_letter = len(list) % len(phone_keyboard[number]) - 1
text += phone_keyboard[number][responding_letter]
return text
def text_to_nums(text):
text_upper = text.upper()
nums = []
for i, character in enumerate(text_upper):
for l in range(10):
for j, __ in enumerate(phone_keyboard[l]):
if character in (phone_keyboard[l][j]):
- if (len(nums) > 0 and nums[len(nums)-1] == l):
+ if (len(nums) > 0 and nums[len(nums) - 1] == l):
nums.append(-1)
for k in range(j+1):
nums.append(l)
break
-
return nums
-angle_conversions = [(286, 315), (16, 45), (46, 75), (76, 105), (106, 135),
- (136, 165), (166, 195), (196, 225), (226, 255), (256, 285)]
+angle_conversions = ((286, 315), (16, 45), (46, 75), (76, 105), (106, 135),
+ (136, 165), (166, 195), (196, 225), (226, 255), (256, 285))
def normalize_angle(angle):
if (angle < 0):
- while(angle < 0):
+ while (angle < 0):
angle += 360
elif (angle > 360):
- while(angle > 360):
+ while (angle > 360):
angle -= 360
-
return angle
def nums_to_angle(nums):
angle = 0
for num in nums:
- angle += int((angle_conversions[num][0]
- + angle_conversions[num][1]) / 2)
+ angle += int(sum(list((angle_conversions[num]))) / 2)
return normalize_angle(angle)
def angles_to_nums(angles):
nums = []
for angle in angles:
for j in range(0, 9):
- if angle_conversions[j][0] <= normalize_angle(angle) <= angle_conversions[j][1]:
+ if normalize_angle(angle) in range(angle_conversions[j][0], angle_conversions[j][1]):
nums.append(j)
break
return nums
def is_phone_tastic(word):
return normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0
+print(nums_to_text([4, 4, 3, 3, 5, 5, 5, -1, 5, 5, 5, 6, 6, 6]))
+print(text_to_nums('asl pls'))
+print(nums_to_angle([1, 5, 9]))
+print(angles_to_nums([16, 14, 90, -120]))
+print(is_phone_tastic('GOD'))

Мариян обнови решението на 02.11.2022 21:06 (преди над 1 година)

phone_keyboard = ((' '), (), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
('M', 'N', 'O'), ('P', 'Q', 'R', 'S'), ('T', 'U', 'V'), ('W', 'X', 'Y', 'Z'))
def group_nums(nums):
last_number = 0
separated_list = []
sub_list = []
for i, number in enumerate(nums):
if i == 0 or number == last_number:
sub_list.append(number)
else:
separated_list.append(sub_list)
sub_list = []
sub_list.append(number)
last_number = number
if not sub_list == []:
separated_list.append(sub_list)
return separated_list
def nums_to_text(nums):
text = ""
separated_list = group_nums(nums)
for list in separated_list:
number = list[0]
if number in (-1, 1):
continue
else:
responding_letter = len(list) % len(phone_keyboard[number]) - 1
text += phone_keyboard[number][responding_letter]
return text
def text_to_nums(text):
text_upper = text.upper()
nums = []
for i, character in enumerate(text_upper):
for l in range(10):
for j, __ in enumerate(phone_keyboard[l]):
if character in (phone_keyboard[l][j]):
if (len(nums) > 0 and nums[len(nums) - 1] == l):
nums.append(-1)
for k in range(j+1):
nums.append(l)
break
return nums
angle_conversions = ((286, 315), (16, 45), (46, 75), (76, 105), (106, 135),
(136, 165), (166, 195), (196, 225), (226, 255), (256, 285))
def normalize_angle(angle):
if (angle < 0):
while (angle < 0):
angle += 360
elif (angle > 360):
while (angle > 360):
angle -= 360
return angle
def nums_to_angle(nums):
angle = 0
for num in nums:
angle += int(sum(list((angle_conversions[num]))) / 2)
return normalize_angle(angle)
def angles_to_nums(angles):
nums = []
for angle in angles:
for j in range(0, 9):
if normalize_angle(angle) in range(angle_conversions[j][0], angle_conversions[j][1]):
nums.append(j)
break
return nums
def is_phone_tastic(word):
- return normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0
-
+ return normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0
-print(nums_to_text([4, 4, 3, 3, 5, 5, 5, -1, 5, 5, 5, 6, 6, 6]))
-print(text_to_nums('asl pls'))
-print(nums_to_angle([1, 5, 9]))
-print(angles_to_nums([16, 14, 90, -120]))
-print(is_phone_tastic('GOD'))

Мариян обнови решението на 02.11.2022 21:23 (преди над 1 година)

phone_keyboard = ((' '), (), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
('M', 'N', 'O'), ('P', 'Q', 'R', 'S'), ('T', 'U', 'V'), ('W', 'X', 'Y', 'Z'))
def group_nums(nums):
last_number = 0
separated_list = []
sub_list = []
for i, number in enumerate(nums):
if i == 0 or number == last_number:
sub_list.append(number)
else:
separated_list.append(sub_list)
sub_list = []
sub_list.append(number)
last_number = number
if not sub_list == []:
separated_list.append(sub_list)
return separated_list
def nums_to_text(nums):
text = ""
separated_list = group_nums(nums)
for list in separated_list:
number = list[0]
if number in (-1, 1):
continue
else:
responding_letter = len(list) % len(phone_keyboard[number]) - 1
text += phone_keyboard[number][responding_letter]
return text
def text_to_nums(text):
text_upper = text.upper()
nums = []
for i, character in enumerate(text_upper):
for l in range(10):
for j, __ in enumerate(phone_keyboard[l]):
if character in (phone_keyboard[l][j]):
if (len(nums) > 0 and nums[len(nums) - 1] == l):
nums.append(-1)
for k in range(j+1):
nums.append(l)
break
return nums
angle_conversions = ((286, 315), (16, 45), (46, 75), (76, 105), (106, 135),
(136, 165), (166, 195), (196, 225), (226, 255), (256, 285))
def normalize_angle(angle):
if (angle < 0):
while (angle < 0):
angle += 360
elif (angle > 360):
while (angle > 360):
angle -= 360
return angle
def nums_to_angle(nums):
angle = 0
for num in nums:
angle += int(sum(list((angle_conversions[num]))) / 2)
return normalize_angle(angle)
def angles_to_nums(angles):
nums = []
for angle in angles:
for j in range(0, 9):
if normalize_angle(angle) in range(angle_conversions[j][0], angle_conversions[j][1]):
nums.append(j)
break
return nums
def is_phone_tastic(word):
- return normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0
+ return len(word) != 0 and normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0

Мариян обнови решението на 02.11.2022 22:02 (преди над 1 година)

-phone_keyboard = ((' '), (), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
+phone_keyboard = ((' ',), ('',), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
('M', 'N', 'O'), ('P', 'Q', 'R', 'S'), ('T', 'U', 'V'), ('W', 'X', 'Y', 'Z'))
def group_nums(nums):
last_number = 0
separated_list = []
sub_list = []
for i, number in enumerate(nums):
if i == 0 or number == last_number:
sub_list.append(number)
else:
separated_list.append(sub_list)
sub_list = []
sub_list.append(number)
last_number = number
-
+
if not sub_list == []:
separated_list.append(sub_list)
return separated_list
def nums_to_text(nums):
text = ""
separated_list = group_nums(nums)
for list in separated_list:
number = list[0]
- if number in (-1, 1):
+ if number == -1:
continue
else:
responding_letter = len(list) % len(phone_keyboard[number]) - 1
text += phone_keyboard[number][responding_letter]
return text
def text_to_nums(text):
text_upper = text.upper()
nums = []
for i, character in enumerate(text_upper):
for l in range(10):
for j, __ in enumerate(phone_keyboard[l]):
if character in (phone_keyboard[l][j]):
if (len(nums) > 0 and nums[len(nums) - 1] == l):
nums.append(-1)
for k in range(j+1):
nums.append(l)
break
return nums
angle_conversions = ((286, 315), (16, 45), (46, 75), (76, 105), (106, 135),
(136, 165), (166, 195), (196, 225), (226, 255), (256, 285))
def normalize_angle(angle):
if (angle < 0):
while (angle < 0):
angle += 360
elif (angle > 360):
while (angle > 360):
angle -= 360
return angle
def nums_to_angle(nums):
angle = 0
for num in nums:
angle += int(sum(list((angle_conversions[num]))) / 2)
return normalize_angle(angle)
def angles_to_nums(angles):
nums = []
for angle in angles:
- for j in range(0, 9):
- if normalize_angle(angle) in range(angle_conversions[j][0], angle_conversions[j][1]):
+ for j in range(0, 10):
+ if normalize_angle(angle) in range(angle_conversions[j][0], angle_conversions[j][1] + 1):
nums.append(j)
break
return nums
def is_phone_tastic(word):
return len(word) != 0 and normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0

Мариян обнови решението на 02.11.2022 22:34 (преди над 1 година)

phone_keyboard = ((' ',), ('',), ('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I'), ('J', 'K', 'L'),
('M', 'N', 'O'), ('P', 'Q', 'R', 'S'), ('T', 'U', 'V'), ('W', 'X', 'Y', 'Z'))
def group_nums(nums):
last_number = 0
separated_list = []
sub_list = []
for i, number in enumerate(nums):
if i == 0 or number == last_number:
sub_list.append(number)
else:
separated_list.append(sub_list)
sub_list = []
sub_list.append(number)
last_number = number
-
+
if not sub_list == []:
separated_list.append(sub_list)
return separated_list
def nums_to_text(nums):
text = ""
separated_list = group_nums(nums)
for list in separated_list:
number = list[0]
- if number == -1:
- continue
- else:
+ if not number == -1:
responding_letter = len(list) % len(phone_keyboard[number]) - 1
text += phone_keyboard[number][responding_letter]
return text
def text_to_nums(text):
text_upper = text.upper()
nums = []
- for i, character in enumerate(text_upper):
+ for character in text_upper:
for l in range(10):
for j, __ in enumerate(phone_keyboard[l]):
- if character in (phone_keyboard[l][j]):
- if (len(nums) > 0 and nums[len(nums) - 1] == l):
+ if character == phone_keyboard[l][j]:
+ if len(nums) > 0 and nums[len(nums) - 1] == l:
nums.append(-1)
- for k in range(j+1):
+ for __ in range(j + 1):

nums.extend([l] * (j + 1)) прави същото.

  • Може да съм оплескал променливите, но използваш променливи с една буква и ми е трудно да разбера коя за какво е - слагай по-описателни имена.
nums.append(l)
break
return nums
angle_conversions = ((286, 315), (16, 45), (46, 75), (76, 105), (106, 135),

Можеш да дефинираш това в някаква логика с няколко реда код, за да избегнеш евентуални грешки при въвеждане, както и да направиш кода по-лесен за промяна.

(136, 165), (166, 195), (196, 225), (226, 255), (256, 285))
def normalize_angle(angle):
if (angle < 0):
while (angle < 0):
angle += 360
elif (angle > 360):
while (angle > 360):
angle -= 360
return angle
def nums_to_angle(nums):
angle = 0
for num in nums:
angle += int(sum(list((angle_conversions[num]))) / 2)
return normalize_angle(angle)
def angles_to_nums(angles):
nums = []
for angle in angles:
- for j in range(0, 10):
+ for j in range(10):
if normalize_angle(angle) in range(angle_conversions[j][0], angle_conversions[j][1] + 1):
nums.append(j)
break
return nums
def is_phone_tastic(word):
- return len(word) != 0 and normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0
+ return len(word) != 0 and normalize_angle(nums_to_angle(text_to_nums(word))) % len(word) == 0