Решение на Телефонна любов от Илия Димов

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

Към профила на Илия Димов

Резултати

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

Код

def insert(result , current , count):
match current:
case 2:
if count == 1:
result = result + 'A'
if count == 2:
result = result + 'B'
if count == 3:
result = result + 'C'
case 3:
if count == 1:
result = result + 'D'
if count == 2:
result = result + 'E'
if count == 3:
result = result + 'F'
case 4:
if count == 1:
result = result + 'G'
if count == 2:
result = result + 'H'
if count == 3:
result = result + 'I'
case 5:
if count == 1:
result = result + 'J'
if count == 2:
result = result + 'K'
if count == 3:
result = result + 'L'
case 6:
if count == 1:
result = result + 'M'
if count == 2:
result = result + 'N'
if count == 3:
result = result + 'O'
case 7:
if count == 1:
result = result + 'P'
if count == 2:
result = result + 'Q'
if count == 3:
result = result + 'R'
if count == 4:
result = result + 'S'
case 8:
if count == 1:
result = result + 'T'
if count == 2:
result = result + 'U'
if count == 3:
result = result + 'V'
case 9:
if count == 1:
result = result + 'W'
if count == 2:
result = result + 'X'
if count == 3:
result = result + 'Y'
if count == 4:
result = result + 'Z'
return result
def nums_to_text(nums):
count = 0
result = ""
current = nums[0]
index_counter = 0
length = len(nums)
for i in nums:
index_counter = index_counter + 1
if i == current and length != index_counter:
count = count + 1
if (current == 9 or current == 7) and count > 4:
count = 1
elif (current != 9 and current != 7) and count > 3:
count = 1
else:
if length == index_counter:
if i == current:
count = count + 1
if (current == 9 or current == 7) and count > 4:
count = 1
elif (current != 9 and current != 7) and count > 3:
count = 1
else:
result = insert(result, current, count)
current = i
count = 1
result = insert(result, current, count)
current = i
count = 1
if current == 0:
result = result + " "
return result
def text_to_nums(text):
text = [i.upper() for i in text]
numpad = [" ", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"]
result = []
prev = ''
for i in text:
for j in range(len(numpad)):
for k in range(len(numpad[j])):
if numpad[j][k] == i:
if j == prev:
result.append(-1)
prev = j
for x in range(0, k+1):
result.append(j)
return result
def nums_to_angle(numbers):
sum = 0
for i in numbers:
if i != -1:
sum = sum + i*30
if sum > 359:
while sum > 359:
sum = sum - 360
elif sum < -359:
while sum < -359:
sum = sum + 360
if sum < 0 :
sum = 360 + sum
return sum
def angles_to_nums(angles):
num = 0
normalized = []
result = []
for i in angles:
if i > 359:
while i > 359:
i = i - 360
elif i < -359:
while i < -359:
i = i + 360
if i < 0:
normalized.append(360 + i)
else:
normalized.append(i)
for i in normalized:
while i > num:
num = num + 30
if i == num:
if num != 0 and num != 330 and num != 360:
result.append(int(i/30))
else:
if i > num - 15:
if num - 15 < 345 and num != 330:
result.append(int(num/30))
elif i <= num - 15:
if num-30 != 0 and num-30 != 330 and num-30 != 360:
result.append(int((num-30)/30))
num = 0
return result
def is_phone_tastic(text):
numbers = text_to_nums(text)
result = nums_to_angle(numbers)
if len(text) == 0:
return False
if result % len(text) == 0:
return True
else :
return False

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

.......F.....F....F...E..............
======================================================================
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
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, 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_correct_mapping (test.TestNumsToAngles)
Test correct mapping for all numbers.
----------------------------------------------------------------------
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: 0 != 300

======================================================================
FAIL: test_random_mixed_case (test.TestNumsToAngles)
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: 90 != 150

----------------------------------------------------------------------
Ran 37 tests in 0.455s

FAILED (failures=3, errors=1)

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

Илия обнови решението на 03.11.2022 14:35 (преди над 1 година)

+def insert(result , current , count):
+ match current:
+ case 2:
+ if count == 1:
+ result = result + 'A'
+ if count == 2:
+ result = result + 'B'
+ if count == 3:
+ result = result + 'C'
+ case 3:
+ if count == 1:
+ result = result + 'D'
+ if count == 2:
+ result = result + 'E'
+ if count == 3:
+ result = result + 'F'
+ case 4:
+ if count == 1:
+ result = result + 'G'
+ if count == 2:
+ result = result + 'H'
+ if count == 3:
+ result = result + 'I'
+ case 5:
+ if count == 1:
+ result = result + 'J'
+ if count == 2:
+ result = result + 'K'
+ if count == 3:
+ result = result + 'L'
+ case 6:
+ if count == 1:
+ result = result + 'M'
+ if count == 2:
+ result = result + 'N'
+ if count == 3:
+ result = result + 'O'
+ case 7:
+ if count == 1:
+ result = result + 'P'
+ if count == 2:
+ result = result + 'Q'
+ if count == 3:
+ result = result + 'R'
+ if count == 4:
+ result = result + 'S'
+ case 8:
+ if count == 1:
+ result = result + 'T'
+ if count == 2:
+ result = result + 'U'
+ if count == 3:
+ result = result + 'V'
+ case 9:
+ if count == 1:
+ result = result + 'W'
+ if count == 2:
+ result = result + 'X'
+ if count == 3:
+ result = result + 'Y'
+ if count == 4:
+ result = result + 'Z'
+ return result
+
+
+def nums_to_text(nums):
+
+ count = 0
+
+ result = ""
+
+ current = nums[0]
+
+ index_counter = 0
+
+ length = len(nums)
+
+ for i in nums:
+
+ index_counter = index_counter + 1
+
+
+ if i == current and length != index_counter:
+ count = count + 1
+ if (current == 9 or current == 7) and count > 4:
+ count = 1
+ elif (current != 9 and current != 7) and count > 3:
+ count = 1
+ else:
+ if length == index_counter:
+ if i == current:
+ count = count + 1
+ if (current == 9 or current == 7) and count > 4:
+ count = 1
+ elif (current != 9 and current != 7) and count > 3:
+ count = 1
+ else:
+ result = insert(result, current, count)
+ current = i
+ count = 1
+ result = insert(result, current, count)
+
+ current = i
+ count = 1
+
+ if current == 0:
+ result = result + " "
+
+ return result
+
+def text_to_nums(text):
+ text = [i.upper() for i in text]
+
+ numpad = [" ", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"]
+
+ result = []
+
+ prev = ''
+
+ for i in text:
+
+ for j in range(len(numpad)):
+
+ for k in range(len(numpad[j])):
+ if numpad[j][k] == i:
+ if j == prev:
+ result.append(-1)
+
+ prev = j
+
+ for x in range(0, k+1):
+ result.append(j)
+
+ return result
+
+def nums_to_angle(numbers):
+
+ sum = 0
+
+ for i in numbers:
+ if i != -1:
+ sum = sum + i*30
+
+ if sum > 359:
+ while sum > 359:
+ sum = sum - 360
+ elif sum < -359:
+ while sum < -359:
+ sum = sum + 360
+
+ if sum < 0 :
+ sum = 360 + sum
+
+ return sum
+
+def angles_to_nums(angles):
+
+ num = 0
+
+ normalized = []
+
+ result = []
+
+ for i in angles:
+
+ if i > 359:
+ while i > 359:
+ i = i - 360
+ elif i < -359:
+ while i < -359:
+ i = i + 360
+
+ if i < 0:
+ normalized.append(360 + i)
+ else:
+ normalized.append(i)
+
+ for i in normalized:
+ while i > num:
+ num = num + 30
+ if i == num:
+ if num != 0 and num != 330 and num != 360:
+ result.append(int(i/30))
+ else:
+ if i > num - 15:
+ if num - 15 < 345 and num != 330:
+ result.append(int(num/30))
+ elif i <= num - 15:
+ if num-30 != 0 and num-30 != 330 and num-30 != 360:
+ result.append(int((num-30)/30))
+ num = 0
+
+ return result
+
+def is_phone_tastic(text):
+ numbers = text_to_nums(text)
+
+ result = nums_to_angle(numbers)
+
+ if len(text) == 0:
+ return False
+
+ if result % len(text) == 0:
+ return True
+ else :
+ return False