Решение на Телефонна любов от Валерия Стояновска

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

Към профила на Валерия Стояновска

Резултати

  • 7 точки от тестове
  • 0 бонус точки
  • 7 точки общо
  • 26 успешни тест(а)
  • 11 неуспешни тест(а)

Код

def nums_to_text(nums):
button_2 = ['A', 'B', 'C']
button_3 = ['D', 'E', 'F']
button_4 = ['G', 'H', 'I']
button_5 = ['J', 'K', 'L']
button_6 = ['M', 'N', 'O']
button_7 = ['P', 'Q', 'R', 'S']
button_8 = ['T', 'U', 'V']
button_9 = ['W', 'X', 'Y', 'Z']
buttons = [button_2, button_3, button_4, button_5, button_6, button_7, button_8, button_9]
# index from 0 to 7
nums.extend([-10])

Предполагам, че можеш да измислиш и по-добър начин да се справиш с граничната стойност. Този е изкуствен и неясен - защо добавяш нещо, защо точно -10...

Иначе, ако искаш да добавиш един елемент, по-добре направо nums.append(-10)

previous_num = nums[0]
counter = 0
idx = 0
text = ""
for num in nums:
if num == previous_num:
counter += 1
elif num != previous_num:
if previous_num == -1 or previous_num == 1:
previous_num = num
continue
elif previous_num == 0:
previous_num = num
text += " "
continue
elif previous_num in (7, 9):
if counter <= 4:
idx = counter - 1
elif counter > 4:
idx = counter - 4 - 1
elif previous_num not in (7, 9):
if counter <= 3:
idx = counter - 1
elif counter > 3:
idx = counter - 3 - 1
button_idx = previous_num - 2
text += buttons[button_idx][idx]
previous_num = num
counter = 1
return text
def text_to_nums(text):
button_2 = ['A', 'B', 'C']
button_3 = ['D', 'E', 'F']
button_4 = ['G', 'H', 'I']
button_5 = ['J', 'K', 'L']
button_6 = ['M', 'N', 'O']
button_7 = ['P', 'Q', 'R', 'S']
button_8 = ['T', 'U', 'V']
button_9 = ['W', 'X', 'Y', 'Z']
list_text = list(text.upper())
list_buttons = list()
previous_letter = list_text[0]
for letter in list_text:

Обзалагам се, че можеш да си спестиш почти идентичните редове, като завъртиш 1-2 цикъла, и/или преправиш данните, чрез които сравняваш. Можеш да получиш вдъхновение от останалите решение, тъй като те вече за публични.

if letter != list_text[0] and letter == previous_letter:
list_buttons.extend([-1])
elif letter == " ":
list_buttons.extend([0])
elif letter in button_2:
if letter in button_2[0]:
list_buttons.extend([2])
elif letter in button_2[1]:
list_buttons.extend([2, 2])
elif letter in button_2[2]:
list_buttons.extend([2, 2, 2])
elif letter in button_3:
if letter in button_3[0]:
list_buttons.extend([3])
elif letter in button_3[1]:
list_buttons.extend([3, 3])
elif letter in button_3[2]:
list_buttons.extend([3, 3, 3])
elif letter in button_4:
if letter in button_4[0]:
list_buttons.extend([4])
elif letter in button_4[1]:
list_buttons.extend([4, 4])
elif letter in button_4[2]:
list_buttons.extend([4, 4, 4])
elif letter in button_5:
if letter in button_5[0]:
list_buttons.extend([5])
elif letter in button_5[1]:
list_buttons.extend([5, 5])
elif letter in button_5[2]:
list_buttons.extend([5, 5, 5])
elif letter in button_6:
if letter in button_6[0]:
list_buttons.extend([6])
elif letter in button_6[1]:
list_buttons.extend([6, 6])
elif letter in button_6[2]:
list_buttons.extend([6, 6, 6])
elif letter in button_7:
if letter in button_7[0]:
list_buttons.extend([7])
elif letter in button_7[1]:
list_buttons.extend([7, 7])
elif letter in button_7[2]:
list_buttons.extend([7, 7, 7])
elif letter in button_7[3]:
list_buttons.extend([7, 7, 7, 7])
elif letter in button_8:
if letter in button_8[0]:
list_buttons.extend([8])
elif letter in button_8[1]:
list_buttons.extend([8, 8])
elif letter in button_8[2]:
list_buttons.extend([8, 8, 8])
elif letter in button_9:
if letter in button_9[0]:
list_buttons.extend([9])
elif letter in button_9[1]:
list_buttons.extend([9, 9])
elif letter in button_9[2]:
list_buttons.extend([9, 9, 9])
elif letter in button_9[3]:
list_buttons.extend([9, 9, 9, 9])
previous_letter = letter
return list_buttons
def nums_to_angle(nums):
sum = 0
for num in nums:
if num == 0:
angle = 10 * 30
else:
angle = num * 30
sum += angle
while sum >= 360:
sum -= 360
return sum
def angles_to_nums(angles):
list_nums = list()
num = 0
for angle in angles:
if angle < 0:
normal_angle = angle + 360
while normal_angle < 0:
normal_angle += 360
elif angle >= 360:
normal_angle = angle - 360
while normal_angle > 360:
normal_angle -= 360
else:
normal_angle = angle
if normal_angle >= 0 and normal_angle <= 15:
continue
elif normal_angle >= 316 and normal_angle <= 359:
continue
elif normal_angle >= 16 and normal_angle <= 45:
num = 1
elif normal_angle >= 46 and normal_angle <= 75:
num = 2
elif normal_angle >= 76 and normal_angle <= 105:
num = 3
elif normal_angle >= 106 and normal_angle <= 135:
num = 4
elif normal_angle >= 136 and normal_angle <= 165:
num = 5
elif normal_angle >= 166 and normal_angle <= 195:
num = 6
elif normal_angle >= 196 and normal_angle <= 225:
num = 7
elif normal_angle >= 226 and normal_angle <= 255:
num = 8
elif normal_angle >= 256 and normal_angle <= 285:
num = 9
elif normal_angle >= 286 and normal_angle <= 345:
num = 0
list_nums.extend([num])
return list_nums
def is_phone_tastic(word):
length_of_word = len(word)
result = False

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

nums_from_word = list()
nums_from_word = text_to_nums(word)
sum_angles = list()
sum_angles = nums_to_angle(nums_from_word)
if sum_angles % length_of_word == 0:
result = True
return result

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

.......F..EF............F.E..FFFEFF..
======================================================================
ERROR: test_empty_input (test.TestIsPhonetastic)
Test with empty input.
----------------------------------------------------------------------
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
IndexError: list index out of range

======================================================================
ERROR: test_random_mixed_case (test.TestNumsToText)
Test for a random mixed case.
----------------------------------------------------------------------
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
IndexError: list index out of range

======================================================================
ERROR: test_empty_input (test.TestTextToNums)
Test with empty input.
----------------------------------------------------------------------
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
IndexError: list index out of range

======================================================================
FAIL: test_random_mixed_case (test.TestAnglesToNums)
Test with a random mixed input.
----------------------------------------------------------------------
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: Lists differ: [5, 1, 2, 4, 9, 9, 1, 8, 0, 9] != [5, 1, 2, 4, 9, 1, 8, 0, 9]

First differing element 5:
9
1

First list contains 1 additional elements.
First extra element 9:
9

- [5, 1, 2, 4, 9, 9, 1, 8, 0, 9]
?                 ---

+ [5, 1, 2, 4, 9, 1, 8, 0, 9]

======================================================================
FAIL: test_random_falses (test.TestIsPhonetastic)
Test with a random input resulting in False.
----------------------------------------------------------------------
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: True is not false

======================================================================
FAIL: test_multiple_timeouts (test.TestNumsToText)
Test with multiple '-1's next to each other.
----------------------------------------------------------------------
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: 'jopu' != 'jmpt'
- jopu
+ jmpt


======================================================================
FAIL: test_starting_with_timeout (test.TestNumsToText)
Test with a sequence starting with a -1.
----------------------------------------------------------------------
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: 'm' != 'o'
- m
+ o


======================================================================
FAIL: test_all_chars (test.TestTextToNums)
Test for correct mapping of all chars.
----------------------------------------------------------------------
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: Lists differ: [2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4,[121 chars]9, 0] != [2, -1, 2, 2, -1, 2, 2, 2, 3, -1, 3, 3, -1, 3[193 chars]9, 0]

First differing element 1:
2
-1

Second list contains 18 additional elements.
First extra element 57:
-1

  [2,
+  -1,
   2,
   2,
+  -1,
   2,
   2,
   2,
   3,
+  -1,
   3,
   3,
+  -1,
   3,
   3,
   3,
   4,
+  -1,
   4,
   4,
+  -1,
   4,
   4,
   4,
   5,
+  -1,
   5,
   5,
+  -1,
   5,
   5,
   5,
   6,
+  -1,
   6,
   6,
+  -1,
   6,
   6,
   6,
   7,
+  -1,
+  7,
+  7,
+  -1,
   7,
   7,
   7,
+  -1,
-  7,
-  7,
   7,
   7,
   7,
   7,
   8,
+  -1,
   8,
   8,
+  -1,
   8,
   8,
   8,
   9,
+  -1,
+  9,
+  9,
+  -1,
   9,
   9,
   9,
+  -1,
-  9,
-  9,
   9,
   9,
   9,
   9,
   0]

======================================================================
FAIL: test_complex_word (test.TestTextToNums)
Test with a complex word that requires -1.
----------------------------------------------------------------------
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: Lists differ: [4, 6, -1] != [4, 6, -1, 6]

Second list contains 1 additional elements.
First extra element 3:
6

- [4, 6, -1]
+ [4, 6, -1, 6]
?          +++


======================================================================
FAIL: test_mixed_casing (test.TestTextToNums)
Test for both lower and capital case.
----------------------------------------------------------------------
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: Lists differ: [2, 2, 2, 3, -1] != [2, -1, 2, 2, 3, -1, 3]

First differing element 1:
2
-1

Second list contains 2 additional elements.
First extra element 5:
-1

- [2, 2, 2, 3, -1]
+ [2, -1, 2, 2, 3, -1, 3]
?     ++++           +++


======================================================================
FAIL: test_random_mixed_case (test.TestTextToNums)
Test for a random mixed case.
----------------------------------------------------------------------
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: [8, 8, 8, 2, 7, 7, 7, 7, 5, 5, 6, 6, 6, 0, -1, -1, 5, 2, 2, 2, 2, 8, 2] not found in ([8, 8, 8, 2, 7, 7, 7, 7, 5, 5, 6, 6, 6, 0, -1, 0, -1, 0, 5, 2, -1, 2, 2, -1, 2, 8, 2], [8, 8, 8, 2, 7, 7, 7, 7, 5, 5, 6, 6, 6, 0, 0, 0, 5, 2, -1, 2, 2, -1, 2, 8, 2])

----------------------------------------------------------------------
Ran 37 tests in 0.464s

FAILED (failures=8, errors=3)

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

Валерия обнови решението на 03.11.2022 01:34 (преди над 1 година)

+def nums_to_text(nums):
+ button_2 = ['A', 'B', 'C']
+ button_3 = ['D', 'E', 'F']
+ button_4 = ['G', 'H', 'I']
+ button_5 = ['J', 'K', 'L']
+ button_6 = ['M', 'N', 'O']
+ button_7 = ['P', 'Q', 'R', 'S']
+ button_8 = ['T', 'U', 'V']
+ button_9 = ['W', 'X', 'Y', 'Z']
+
+ buttons = [button_2, button_3, button_4, button_5, button_6, button_7, button_8, button_9]
+ # index from 0 to 7
+
+ nums.extend([-10])

Предполагам, че можеш да измислиш и по-добър начин да се справиш с граничната стойност. Този е изкуствен и неясен - защо добавяш нещо, защо точно -10...

Иначе, ако искаш да добавиш един елемент, по-добре направо nums.append(-10)

+ previous_num = nums[0]
+ counter = 0
+ idx = 0
+ text = ""
+
+ for num in nums:
+ if num == previous_num:
+ counter += 1
+
+ elif num != previous_num:
+ if previous_num == -1 or previous_num == 1:
+ previous_num = num
+ continue
+
+ elif previous_num == 0:
+ previous_num = num
+ text += " "
+ continue
+
+ elif previous_num in (7, 9):
+ if counter <= 4:
+ idx = counter - 1
+ elif counter > 4:
+ idx = counter - 4 - 1
+
+ elif previous_num not in (7, 9):
+ if counter <= 3:
+ idx = counter - 1
+ elif counter > 3:
+ idx = counter - 3 - 1
+
+ button_idx = previous_num - 2
+ text += buttons[button_idx][idx]
+ previous_num = num
+ counter = 1
+
+ return text
+
+
+def text_to_nums(text):
+ button_2 = ['A', 'B', 'C']
+ button_3 = ['D', 'E', 'F']
+ button_4 = ['G', 'H', 'I']
+ button_5 = ['J', 'K', 'L']
+ button_6 = ['M', 'N', 'O']
+ button_7 = ['P', 'Q', 'R', 'S']
+ button_8 = ['T', 'U', 'V']
+ button_9 = ['W', 'X', 'Y', 'Z']
+
+ list_text = list(text.upper())
+ list_buttons = list()
+
+ previous_letter = list_text[0]
+
+ for letter in list_text:

Обзалагам се, че можеш да си спестиш почти идентичните редове, като завъртиш 1-2 цикъла, и/или преправиш данните, чрез които сравняваш. Можеш да получиш вдъхновение от останалите решение, тъй като те вече за публични.

+ if letter != list_text[0] and letter == previous_letter:
+ list_buttons.extend([-1])
+
+ elif letter == " ":
+ list_buttons.extend([0])
+
+ elif letter in button_2:
+ if letter in button_2[0]:
+ list_buttons.extend([2])
+ elif letter in button_2[1]:
+ list_buttons.extend([2, 2])
+ elif letter in button_2[2]:
+ list_buttons.extend([2, 2, 2])
+
+ elif letter in button_3:
+ if letter in button_3[0]:
+ list_buttons.extend([3])
+ elif letter in button_3[1]:
+ list_buttons.extend([3, 3])
+ elif letter in button_3[2]:
+ list_buttons.extend([3, 3, 3])
+
+ elif letter in button_4:
+ if letter in button_4[0]:
+ list_buttons.extend([4])
+ elif letter in button_4[1]:
+ list_buttons.extend([4, 4])
+ elif letter in button_4[2]:
+ list_buttons.extend([4, 4, 4])
+
+ elif letter in button_5:
+ if letter in button_5[0]:
+ list_buttons.extend([5])
+ elif letter in button_5[1]:
+ list_buttons.extend([5, 5])
+ elif letter in button_5[2]:
+ list_buttons.extend([5, 5, 5])
+
+ elif letter in button_6:
+ if letter in button_6[0]:
+ list_buttons.extend([6])
+ elif letter in button_6[1]:
+ list_buttons.extend([6, 6])
+ elif letter in button_6[2]:
+ list_buttons.extend([6, 6, 6])
+
+ elif letter in button_7:
+ if letter in button_7[0]:
+ list_buttons.extend([7])
+ elif letter in button_7[1]:
+ list_buttons.extend([7, 7])
+ elif letter in button_7[2]:
+ list_buttons.extend([7, 7, 7])
+ elif letter in button_7[3]:
+ list_buttons.extend([7, 7, 7, 7])
+
+ elif letter in button_8:
+ if letter in button_8[0]:
+ list_buttons.extend([8])
+ elif letter in button_8[1]:
+ list_buttons.extend([8, 8])
+ elif letter in button_8[2]:
+ list_buttons.extend([8, 8, 8])
+
+ elif letter in button_9:
+ if letter in button_9[0]:
+ list_buttons.extend([9])
+ elif letter in button_9[1]:
+ list_buttons.extend([9, 9])
+ elif letter in button_9[2]:
+ list_buttons.extend([9, 9, 9])
+ elif letter in button_9[3]:
+ list_buttons.extend([9, 9, 9, 9])
+
+ previous_letter = letter
+
+ return list_buttons
+
+
+def nums_to_angle(nums):
+ sum = 0
+
+ for num in nums:
+ if num == 0:
+ angle = 10 * 30
+ else:
+ angle = num * 30
+ sum += angle
+
+ while sum >= 360:
+ sum -= 360
+
+ return sum
+
+
+def angles_to_nums(angles):
+ list_nums = list()
+ num = 0
+
+ for angle in angles:
+ if angle < 0:
+ normal_angle = angle + 360
+ while normal_angle < 0:
+ normal_angle += 360
+
+ elif angle >= 360:
+ normal_angle = angle - 360
+ while normal_angle > 360:
+ normal_angle -= 360
+
+ else:
+ normal_angle = angle
+
+ if normal_angle >= 0 and normal_angle <= 15:
+ continue
+ elif normal_angle >= 316 and normal_angle <= 359:
+ continue
+ elif normal_angle >= 16 and normal_angle <= 45:
+ num = 1
+ elif normal_angle >= 46 and normal_angle <= 75:
+ num = 2
+ elif normal_angle >= 76 and normal_angle <= 105:
+ num = 3
+ elif normal_angle >= 106 and normal_angle <= 135:
+ num = 4
+ elif normal_angle >= 136 and normal_angle <= 165:
+ num = 5
+ elif normal_angle >= 166 and normal_angle <= 195:
+ num = 6
+ elif normal_angle >= 196 and normal_angle <= 225:
+ num = 7
+ elif normal_angle >= 226 and normal_angle <= 255:
+ num = 8
+ elif normal_angle >= 256 and normal_angle <= 285:
+ num = 9
+ elif normal_angle >= 286 and normal_angle <= 345:
+ num = 0
+
+ list_nums.extend([num])
+
+ return list_nums
+
+
+def is_phone_tastic(word):
+ length_of_word = len(word)
+ result = False

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

+ nums_from_word = list()
+ nums_from_word = text_to_nums(word)
+
+ sum_angles = list()
+ sum_angles = nums_to_angle(nums_from_word)
+
+ if sum_angles % length_of_word == 0:
+ result = True
+
+ return result