Решение на Телефонна любов от Александра Радева

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

Към профила на Александра Радева

Резултати

  • 9 точки от тестове
  • 0 бонус точки
  • 9 точки общо
  • 33 успешни тест(а)
  • 4 неуспешни тест(а)

Код

import math
buttons = [ ( 0 , " " ),
( 1 , "" ),
( 2 , "ABC" ),
( 3 , "DEF" ),
( 4 , "GHI" ),
( 5 , "JKL" ),
( 6 , "MNO" ),
( 7 , "PQRS" ),
( 8 , "TUV" ),
( 9 , "WXYZ" ) ]
def nums_to_text(nums) :
nums.append(-2)
text = ""
clicks = 0
prev = -2
for num in nums :
if num == prev :
clicks+=1
else :
for button, letters in buttons :
if button == prev :
if button != 1 :
text += letters[clicks%len(letters)]
clicks = 0
prev = num
return text
def text_to_nums(text) :
nums = []
clicks = 0
for letter in text :
upper_letter= letter.upper()
for button, letters in buttons :
if upper_letter in letters :
clicks = letters.find(upper_letter)
if len(nums) > 0 :
if nums[-1] == button :
nums.append(-1)
while clicks >= 0 :
nums.append(button)
clicks -= 1
break
return nums
def nums_to_angle(nums) :
angle = 0
for num in nums :
if num != 0 :
angle+= num*30
else : angle += 300

Нека това е на нов ред, след else:, както е прието. Ако в дадения случай просто казваш continue, pass или нещо друго подобно, може, но иначе, прието е операцията да е на нов ред.

return angle%360
def angles_to_nums(angles) :
nums = []
num = 0
for angle in angles :
if angle < 0 :
angle = angle % 360 + 360
if angle > 359 :
angle = angle % 360
if angle >= 330: continue
if angle%30 == 15 : num = math.floor(angle/30)
else : num = round(angle/30)
if num == 0: continue
nums.append(num)
return nums
def is_phone_tastic(word) :
if len(word) == 0 : return False
nums = text_to_nums(word)
angle = nums_to_angle(nums)
number_of_letters = len([element for element in word if element.isalpha()])
if angle % number_of_letters == 0 :
return True
return False

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

..F....F................F....F.......
======================================================================
FAIL: test_ignoring_over_330 (test.TestAnglesToNums)
Test that angles rounded over 330 are ignored.
----------------------------------------------------------------------
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: [11] != []

First list contains 1 additional elements.
First extra element 0:
11

- [11]
+ []

======================================================================
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, 1, 8, 10, 9] != [5, 1, 2, 4, 9, 1, 8, 0, 9]

First differing element 7:
10
0

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

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

======================================================================
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


----------------------------------------------------------------------
Ran 37 tests in 0.339s

FAILED (failures=4)

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

Александра обнови решението на 03.11.2022 12:50 (преди над 1 година)

+import math
+
+buttons = [ ( 0 , " " ),
+ ( 1 , "" ),
+ ( 2 , "ABC" ),
+ ( 3 , "DEF" ),
+ ( 4 , "GHI" ),
+ ( 5 , "JKL" ),
+ ( 6 , "MNO" ),
+ ( 7 , "PQRS" ),
+ ( 8 , "TUV" ),
+ ( 9 , "WXYZ" ) ]
+
+def nums_to_text(nums) :
+ nums.append(-2)
+ text = ""
+ clicks = 0
+ prev = -2
+
+ for num in nums :
+ if num == prev :
+ clicks+=1
+ else :
+ for button, letters in buttons :
+ if button == prev :
+ if button != 1 :
+ text += letters[clicks%len(letters)]
+ clicks = 0
+ prev = num
+ return text
+
+def text_to_nums(text) :
+ nums = []
+ clicks = 0
+ for letter in text :
+ upper_letter= letter.upper()
+ for button, letters in buttons :
+ if upper_letter in letters :
+ clicks = letters.find(upper_letter)
+ if len(nums) > 0 :
+ if nums[-1] == button :
+ nums.append(-1)
+ while clicks >= 0 :
+ nums.append(button)
+ clicks -= 1
+ break
+
+ return nums
+
+def nums_to_angle(nums) :
+ angle = 0
+
+ for num in nums :
+ if num != 0 :
+ angle+= num*30
+ else : angle += 300

Нека това е на нов ред, след else:, както е прието. Ако в дадения случай просто казваш continue, pass или нещо друго подобно, може, но иначе, прието е операцията да е на нов ред.

+ return angle%360
+
+def angles_to_nums(angles) :
+ nums = []
+ num = 0
+ for angle in angles :
+ if angle < 0 :
+ angle = angle % 360 + 360
+ if angle > 359 :
+ angle = angle % 360
+ if angle >= 330: continue
+ if angle%30 == 15 : num = math.floor(angle/30)
+ else : num = round(angle/30)
+ if num == 0: continue
+ nums.append(num)
+ return nums
+
+def is_phone_tastic(word) :
+ if len(word) == 0 : return False
+ nums = text_to_nums(word)
+ angle = nums_to_angle(nums)
+ number_of_letters = len([element for element in word if element.isalpha()])
+ if angle % number_of_letters == 0 :
+ return True
+ return False