Решение на Телефонна любов от Цветан Тошев

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

Към профила на Цветан Тошев

Резултати

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

Код

def nums_to_text(nums):
mobile_keyboard = {'2': 'A','22': 'B','222': 'C','3': 'D','33': 'E','333': 'F',
'4': 'G','44': 'H','444': 'I','5': 'J','55': 'K','555': 'L',
'6': 'M','66': 'N','666': 'O','7': 'P','77': 'Q','777': 'R','7777': 'S',
'8': 'T','88': 'U','888': 'V','9': 'W','99': 'X','999': 'Y','9999': 'Z','0': ' ','-1': '','1': ''}
message = []
temp_letter = ''
last_num = -2
counter = 0
for num in nums:
if counter == 0:
last_num = num
temp_letter += str(num)
counter += 1
continue
elif last_num == 0 and num == 0:
message.append(temp_letter)
temp_letter = ''
temp_letter += str(num)
last_num = num
continue
elif last_num != num and num == 0:
message.append(temp_letter)
temp_letter = ''
temp_letter += str(num)
last_num = num
continue
elif num == last_num:
temp_letter += str(num)
last_num = num
continue
elif last_num != num:
message.append(temp_letter)
temp_letter = ''
temp_letter += str(num)
last_num = num
message.append(temp_letter)
temp_input =""
count = 0
final_messege = ""
for letter in message:
if "1" in letter:
continue
else:
for char in letter:
if char in ["2","3","4","5","6","8"]:
if count == 3:
count = 1
temp_input = ''
temp_input += char
else:
count += 1
temp_input += char
elif char in ["7","9"]:
if count == 4:
count = 0
temp_input = ''
temp_input += char
else:
count += 1
temp_input += char
elif char == '0':
final_messege += mobile_keyboard["0"]
if char == "0":
continue
count = 0
final_messege += mobile_keyboard[temp_input]
temp_input=''
return final_messege
def text_to_nums(text):
message = [n.upper() for n in text]
mobile_keyboard = {'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],' ': [0]}
message_in_numbers = []
for char in message:
message_in_numbers.append(mobile_keyboard[char])
message_with_waiting = []
counter =0
for letter in message_in_numbers:
if counter == 0:
last_letter = letter
counter += 1
message_with_waiting.append(letter)
else:
if letter == [0]:
message_with_waiting.append(letter)
last_letter = letter
continue
if last_letter[0] in letter or letter[0] in last_letter:
message_with_waiting.append([-1])
message_with_waiting.append(letter)
last_letter = letter
else:
message_with_waiting.append(letter)
last_letter = letter
flat_list = [item for sublist in message_with_waiting for item in sublist]
return flat_list
def nums_to_angle(nums):
total_angle = 0
for angle in nums:
if angle == 0:
total_angle += 300
else:
total_angle += angle * 30
while(total_angle >= 360):
total_angle -= 360
return total_angle
def angles_to_nums(angles):
processed_angles = []
for angle in angles:
if angle < 0:
while (angle < 0):
angle += 360
if angle > 359:
while (angle > 360):
angle -= 360
if 16<=angle and angle <= 45:
processed_angles.append(1)
continue
if 46<=angle and angle <= 75:
processed_angles.append(2)
continue
if 76<=angle and angle <= 105:
processed_angles.append(3)
continue
if 106<=angle and angle <= 135:
processed_angles.append(4)
continue
if 136<=angle and angle <= 165:
processed_angles.append(5)
continue
if 166<=angle and angle <= 195:
processed_angles.append(6)
continue
if 196<=angle and angle <= 225:
processed_angles.append(7)
continue
if 226<=angle and angle <= 255:
processed_angles.append(8)
continue
if 256<=angle and angle <= 285:
processed_angles.append(9)
continue
if 286<=angle and angle <= 315:
processed_angles.append(0)
return processed_angles
def is_phone_tastic(word):
if word == '':
return False
word = [n.upper() for n in word]
numbers_from_word = text_to_nums(word)
print(numbers_from_word)
angel_from_numbers = nums_to_angle(numbers_from_word)
print(angel_from_numbers)
if (angel_from_numbers % len(word)) == 0:
return True
else:
return False

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

......................E...F..........
======================================================================
ERROR: test_empty_input (test.TestNumsToText)
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
UnboundLocalError: local variable 'char' referenced before assignment

======================================================================
FAIL: 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
AssertionError: 'fmi rulzzx' != 'fmi rulzzz'
- fmi rulzzx
?          ^
+ fmi rulzzz
?          ^


----------------------------------------------------------------------
Ran 37 tests in 0.446s

FAILED (failures=1, errors=1)

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

Цветан обнови решението на 02.11.2022 23:15 (преди над 1 година)

+def nums_to_text(nums):
+
+ mobile_keyboard = {'2': 'A','22': 'B','222': 'C','3': 'D','33': 'E','333': 'F',
+ '4': 'G','44': 'H','444': 'I','5': 'J','55': 'K','555': 'L',
+ '6': 'M','66': 'N','666': 'O','7': 'P','77': 'Q','777': 'R','7777': 'S',
+ '8': 'T','88': 'U','888': 'V','9': 'W','99': 'X','999': 'Y','9999': 'Z','0': ' ','-1': '','1': ''}
+
+ message = []
+ temp_letter = ''
+ last_num = -2
+ counter = 0
+
+ for num in nums:
+ if counter == 0:
+ last_num = num
+ temp_letter += str(num)
+ counter += 1
+ continue
+ elif last_num == 0 and num == 0:
+ message.append(temp_letter)
+ temp_letter = ''
+ temp_letter += str(num)
+ last_num = num
+ continue
+ elif last_num != num and num == 0:
+ message.append(temp_letter)
+ temp_letter = ''
+ temp_letter += str(num)
+ last_num = num
+ continue
+ elif num == last_num:
+ temp_letter += str(num)
+ last_num = num
+ continue
+ elif last_num != num:
+ message.append(temp_letter)
+ temp_letter = ''
+ temp_letter += str(num)
+ last_num = num
+
+ message.append(temp_letter)
+
+ temp_input =""
+ count = 0
+ final_messege = ""
+
+ for letter in message:
+ if "1" in letter:
+ continue
+ else:
+ for char in letter:
+ if char in ["2","3","4","5","6","8"]:
+ if count == 3:
+ count = 1
+ temp_input = ''
+ temp_input += char
+ else:
+ count += 1
+ temp_input += char
+ elif char in ["7","9"]:
+ if count == 4:
+ count = 0
+ temp_input = ''
+ temp_input += char
+ else:
+ count += 1
+ temp_input += char
+ elif char == '0':
+ final_messege += mobile_keyboard["0"]
+
+ if char == "0":
+ continue
+
+ count = 0
+ final_messege += mobile_keyboard[temp_input]
+ temp_input=''
+
+ return final_messege
+
+
+def text_to_nums(text):
+ message = [n.upper() for n in text]
+ mobile_keyboard = {'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],' ': [0]}
+
+ message_in_numbers = []
+
+ for char in message:
+ message_in_numbers.append(mobile_keyboard[char])
+
+ message_with_waiting = []
+ counter =0
+
+ for letter in message_in_numbers:
+ if counter == 0:
+ last_letter = letter
+ counter += 1
+ message_with_waiting.append(letter)
+ else:
+ if letter == [0]:
+ message_with_waiting.append(letter)
+ last_letter = letter
+ continue
+ if last_letter[0] in letter or letter[0] in last_letter:
+ message_with_waiting.append([-1])
+ message_with_waiting.append(letter)
+ last_letter = letter
+ else:
+ message_with_waiting.append(letter)
+ last_letter = letter
+
+ flat_list = [item for sublist in message_with_waiting for item in sublist]
+
+ return flat_list
+
+
+def nums_to_angle(nums):
+ total_angle = 0
+
+ for angle in nums:
+ if angle == 0:
+ total_angle += 300
+ else:
+ total_angle += angle * 30
+
+ while(total_angle >= 360):
+ total_angle -= 360
+
+ return total_angle
+
+
+def angles_to_nums(angles):
+
+ processed_angles = []
+
+ for angle in angles:
+ if angle < 0:
+ while (angle < 0):
+ angle += 360
+ if angle > 359:
+ while (angle > 360):
+ angle -= 360
+ if 16<=angle and angle <= 45:
+ processed_angles.append(1)
+ continue
+ if 46<=angle and angle <= 75:
+ processed_angles.append(2)
+ continue
+ if 76<=angle and angle <= 105:
+ processed_angles.append(3)
+ continue
+ if 106<=angle and angle <= 135:
+ processed_angles.append(4)
+ continue
+ if 136<=angle and angle <= 165:
+ processed_angles.append(5)
+ continue
+ if 166<=angle and angle <= 195:
+ processed_angles.append(6)
+ continue
+ if 196<=angle and angle <= 225:
+ processed_angles.append(7)
+ continue
+ if 226<=angle and angle <= 255:
+ processed_angles.append(8)
+ continue
+ if 256<=angle and angle <= 285:
+ processed_angles.append(9)
+ continue
+ if 286<=angle and angle <= 315:
+ processed_angles.append(0)
+
+ return processed_angles
+
+def is_phone_tastic(word):
+ if word == '':
+ return False
+
+ word = [n.upper() for n in word]
+ count = 0
+
+ for char in word:
+ if char != " ":
+ count += 1
+
+ if count == 0:
+ return False
+
+ numbers_from_word = text_to_nums(word)
+ angel_from_numbers = nums_to_angle(numbers_from_word)
+
+ if (angel_from_numbers % count) == 0:
+ return True
+ else:
+ return False

Цветан обнови решението на 03.11.2022 10:09 (преди над 1 година)

def nums_to_text(nums):
mobile_keyboard = {'2': 'A','22': 'B','222': 'C','3': 'D','33': 'E','333': 'F',
'4': 'G','44': 'H','444': 'I','5': 'J','55': 'K','555': 'L',
'6': 'M','66': 'N','666': 'O','7': 'P','77': 'Q','777': 'R','7777': 'S',
'8': 'T','88': 'U','888': 'V','9': 'W','99': 'X','999': 'Y','9999': 'Z','0': ' ','-1': '','1': ''}
message = []
temp_letter = ''
last_num = -2
counter = 0
for num in nums:
if counter == 0:
last_num = num
temp_letter += str(num)
counter += 1
continue
elif last_num == 0 and num == 0:
message.append(temp_letter)
temp_letter = ''
temp_letter += str(num)
last_num = num
continue
elif last_num != num and num == 0:
message.append(temp_letter)
temp_letter = ''
temp_letter += str(num)
last_num = num
continue
elif num == last_num:
temp_letter += str(num)
last_num = num
continue
elif last_num != num:
message.append(temp_letter)
temp_letter = ''
temp_letter += str(num)
last_num = num
message.append(temp_letter)
temp_input =""
count = 0
final_messege = ""
for letter in message:
if "1" in letter:
continue
else:
for char in letter:
if char in ["2","3","4","5","6","8"]:
if count == 3:
count = 1
temp_input = ''
temp_input += char
else:
count += 1
temp_input += char
elif char in ["7","9"]:
if count == 4:
count = 0
temp_input = ''
temp_input += char
else:
count += 1
temp_input += char
elif char == '0':
final_messege += mobile_keyboard["0"]
if char == "0":
continue
count = 0
final_messege += mobile_keyboard[temp_input]
temp_input=''
return final_messege
def text_to_nums(text):
message = [n.upper() for n in text]
mobile_keyboard = {'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],' ': [0]}
message_in_numbers = []
for char in message:
message_in_numbers.append(mobile_keyboard[char])
message_with_waiting = []
counter =0
for letter in message_in_numbers:
if counter == 0:
last_letter = letter
counter += 1
message_with_waiting.append(letter)
else:
if letter == [0]:
message_with_waiting.append(letter)
last_letter = letter
continue
if last_letter[0] in letter or letter[0] in last_letter:
message_with_waiting.append([-1])
message_with_waiting.append(letter)
last_letter = letter
else:
message_with_waiting.append(letter)
last_letter = letter
flat_list = [item for sublist in message_with_waiting for item in sublist]
return flat_list
def nums_to_angle(nums):
total_angle = 0
for angle in nums:
if angle == 0:
total_angle += 300
else:
total_angle += angle * 30
while(total_angle >= 360):
total_angle -= 360
return total_angle
def angles_to_nums(angles):
processed_angles = []
for angle in angles:
if angle < 0:
while (angle < 0):
angle += 360
if angle > 359:
while (angle > 360):
angle -= 360
if 16<=angle and angle <= 45:
processed_angles.append(1)
continue
if 46<=angle and angle <= 75:
processed_angles.append(2)
continue
if 76<=angle and angle <= 105:
processed_angles.append(3)
continue
if 106<=angle and angle <= 135:
processed_angles.append(4)
continue
if 136<=angle and angle <= 165:
processed_angles.append(5)
continue
if 166<=angle and angle <= 195:
processed_angles.append(6)
continue
if 196<=angle and angle <= 225:
processed_angles.append(7)
continue
if 226<=angle and angle <= 255:
processed_angles.append(8)
continue
if 256<=angle and angle <= 285:
processed_angles.append(9)
continue
if 286<=angle and angle <= 315:
processed_angles.append(0)
return processed_angles
def is_phone_tastic(word):
if word == '':
return False
word = [n.upper() for n in word]
- count = 0
-
- for char in word:
- if char != " ":
- count += 1
+
- if count == 0:
- return False
-
numbers_from_word = text_to_nums(word)
+ print(numbers_from_word)
angel_from_numbers = nums_to_angle(numbers_from_word)
-
- if (angel_from_numbers % count) == 0:
+ print(angel_from_numbers)
+ if (angel_from_numbers % len(word)) == 0:
return True
else:
return False