Решение на Телефонна любов от Гергана Гочева

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

Към профила на Гергана Гочева

Резултати

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

Код

numbers_and_letters = {0: " ", 2: "ABC", 3: "DEF", 4: "GHI", 5: "JKL", 6: "MNO", 7: "PQRS", 8: "TUV", 9: "WXYZ"}
letters_and_numbers = {" ": 0, "ABC": 2, "DEF": 3, "GHI": 4, "JKL": 5, "MNO": 6, "PQRS": 7, "TUV": 8, "WXYZ": 9}
def make_list_sets(my_list):
list_of_sets = []
length = len(my_list) - 1
index = 0
while index <= length:
counter = 1
if my_list[index] == 1:
index += 1
continue
while index < length and my_list[index] == my_list[index + 1]:
counter += 1
index += 1
list_of_sets.append((my_list[index], counter))
index += 1
return list_of_sets
def nums_to_text(nums):
nums_set = make_list_sets(nums)
result = ""
for item in nums_set:
digit = item[0]
times = item[1]
if digit == -1:
continue
if digit in (7, 9) and times >= 4:
times = times % 4
elif digit == 0:
result += ' ' * times
continue
elif times > 3:
times = times % 3
result += numbers_and_letters[digit][times - 1]
return result
def text_to_nums(text):
my_text = [letter.upper() for letter in text]
result = []
last_key = ''
for letter in my_text:
value = 0
position = 0
for key in letters_and_numbers.keys():
if letter not in key:
continue
else:
if last_key == key:
result.append(-1)
value = letters_and_numbers[key]
position = key.index(letter)
last_key = key
break
result.extend([value] * (position + 1))
return result
def nums_to_angle(nums):
result = 0
for number in nums:
if number == 0:
result += 10
result += number
result = (result * 30) % 360
return result
def angles_to_nums(angles):
result = []
for angle in angles:
if angle % 30 <= 15:
normalized_angle = (angle % 360) // 30
else:
normalized_angle = ((angle % 360) // 30) + 1
if 0 < normalized_angle < 11:
result.append(normalized_angle % 10)
return result
def is_phone_tastic(word):
return nums_to_angle(text_to_nums(word)) % len(word) == 0

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

..........E..........................
======================================================================
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
ZeroDivisionError: integer division or modulo by zero

----------------------------------------------------------------------
Ran 37 tests in 0.324s

FAILED (errors=1)

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

Гергана обнови решението на 29.10.2022 23:54 (преди над 1 година)

+numbers_and_letters = {0: " ", 2: "ABC", 3: "DEF", 4: "GHI", 5: "JKL", 6: "MNO", 7: "PQRS", 8: "TUV", 9: "WXYZ"}
+letters_and_numbers = {" ": 0, "ABC": 2, "DEF": 3, "GHI": 4, "JKL": 5, "MNO": 6, "PQRS": 7, "TUV": 8, "WXYZ": 9}
+
+
+def make_list_sets(my_list):
+ list_of_sets = []
+ length = len(my_list) - 1
+ index = 0
+ while index <= length:
+ counter = 1
+ while index < length and my_list[index] == my_list[index + 1]:
+ counter += 1
+ index += 1
+ list_of_sets.append((my_list[index], counter))
+ index += 1
+ return list_of_sets
+
+
+def nums_to_text(nums):
+ nums_set = make_list_sets(nums)
+ result = ""
+ for item in nums_set:
+ digit = item[0]
+ times = item[1]
+ if digit == -1:
+ continue
+ if digit == 7 or digit == 9 and times > 4:
+ times = times % 4
+ elif digit == 0 and times > 1:
+ times = 1
+ elif times > 3:
+ times = times % 3
+ result += numbers_and_letters[digit][times - 1]
+ return result
+
+
+def text_to_nums(text):
+ my_text = [letter.upper() for letter in text]
+ result = []
+ last_key = ''
+ for letter in my_text:
+ value = 0
+ position = 0
+ for key in letters_and_numbers.keys():
+ if letter not in key:
+ continue
+ else:
+ if last_key == key:
+ result.append(-1)
+ value = letters_and_numbers[key]
+ position = key.index(letter)
+ last_key = key
+ break
+ [result.append(value) for i in range(position + 1)]
+ return result
+
+
+def nums_to_angle(nums):
+ result = 0
+ for number in nums:
+ if number == 0:
+ result += 10
+ result += number
+ result = (result*30) % 360
+ return result
+
+
+def angles_to_nums(angles):
+ result = []
+ for angle in angles:
+ if angle % 30 <= 15:
+ better_angle = (angle % 360) // 30
+ else:
+ better_angle = ((angle % 360) // 30 + 1)
+ if 0 < better_angle < 11:
+ result.append(better_angle % 10)
+ return result
+
+
+def is_phone_tastic(word):
+ if nums_to_angle(text_to_nums(word)) % len(word) == 0:
+ return True
+ return False

Гергана обнови решението на 30.10.2022 00:09 (преди над 1 година)

numbers_and_letters = {0: " ", 2: "ABC", 3: "DEF", 4: "GHI", 5: "JKL", 6: "MNO", 7: "PQRS", 8: "TUV", 9: "WXYZ"}
letters_and_numbers = {" ": 0, "ABC": 2, "DEF": 3, "GHI": 4, "JKL": 5, "MNO": 6, "PQRS": 7, "TUV": 8, "WXYZ": 9}
def make_list_sets(my_list):
list_of_sets = []
length = len(my_list) - 1
index = 0
while index <= length:
counter = 1
+ if my_list[index] == 1:
+ index += 1
+ continue
while index < length and my_list[index] == my_list[index + 1]:
counter += 1
index += 1
list_of_sets.append((my_list[index], counter))
index += 1
return list_of_sets
def nums_to_text(nums):
nums_set = make_list_sets(nums)
result = ""
for item in nums_set:
digit = item[0]
times = item[1]
if digit == -1:
continue
if digit == 7 or digit == 9 and times > 4:
times = times % 4
- elif digit == 0 and times > 1:
+ elif digit == 0:
times = 1
elif times > 3:
times = times % 3
result += numbers_and_letters[digit][times - 1]
return result
def text_to_nums(text):
my_text = [letter.upper() for letter in text]
result = []
last_key = ''
for letter in my_text:
value = 0
position = 0
for key in letters_and_numbers.keys():
if letter not in key:
continue
else:
if last_key == key:
result.append(-1)
value = letters_and_numbers[key]
position = key.index(letter)
last_key = key
break
[result.append(value) for i in range(position + 1)]

Тук променливата i не се използва, така че е прието да използваш _, за да е ясно, че не ти трябва. Така или иначе, бих казал, че това е по-удачен вариант да постигнеш същото нещо:

result.extend([value] * (position + 1))

return result
def nums_to_angle(nums):
result = 0
for number in nums:
if number == 0:
result += 10
result += number
result = (result*30) % 360
return result
def angles_to_nums(angles):
result = []
for angle in angles:
if angle % 30 <= 15:
better_angle = (angle % 360) // 30

better_angle е чудесно име за тази стойност :D Дори ти позволява, в случай на нужда, да дефинираш и best_angle, ако в бъдеще ти потрябва още една модификация.

else:
better_angle = ((angle % 360) // 30 + 1)
if 0 < better_angle < 11:
result.append(better_angle % 10)
return result
def is_phone_tastic(word):
if nums_to_angle(text_to_nums(word)) % len(word) == 0:
return True
return False

Гергана обнови решението на 30.10.2022 14:32 (преди над 1 година)

numbers_and_letters = {0: " ", 2: "ABC", 3: "DEF", 4: "GHI", 5: "JKL", 6: "MNO", 7: "PQRS", 8: "TUV", 9: "WXYZ"}
letters_and_numbers = {" ": 0, "ABC": 2, "DEF": 3, "GHI": 4, "JKL": 5, "MNO": 6, "PQRS": 7, "TUV": 8, "WXYZ": 9}
def make_list_sets(my_list):
list_of_sets = []
length = len(my_list) - 1
index = 0
while index <= length:
counter = 1
if my_list[index] == 1:
index += 1
continue
while index < length and my_list[index] == my_list[index + 1]:
counter += 1
index += 1
list_of_sets.append((my_list[index], counter))
index += 1
return list_of_sets
def nums_to_text(nums):
nums_set = make_list_sets(nums)
result = ""
for item in nums_set:
digit = item[0]
times = item[1]
if digit == -1:
continue
- if digit == 7 or digit == 9 and times > 4:
+ if digit in (7, 9) and times > 4:
times = times % 4
elif digit == 0:
times = 1
elif times > 3:
times = times % 3
result += numbers_and_letters[digit][times - 1]
return result
def text_to_nums(text):
my_text = [letter.upper() for letter in text]
result = []
last_key = ''
for letter in my_text:
value = 0
position = 0
for key in letters_and_numbers.keys():
if letter not in key:
continue
else:
if last_key == key:
result.append(-1)
value = letters_and_numbers[key]
position = key.index(letter)
last_key = key
break
- [result.append(value) for i in range(position + 1)]
+ result.extend([value] * (position + 1))
return result
def nums_to_angle(nums):
result = 0
for number in nums:
if number == 0:
result += 10
result += number
- result = (result*30) % 360
+ result = (result * 30) % 360
return result
def angles_to_nums(angles):
result = []
for angle in angles:
if angle % 30 <= 15:
- better_angle = (angle % 360) // 30
+ normalized_angle = (angle % 360) // 30
else:
- better_angle = ((angle % 360) // 30 + 1)
- if 0 < better_angle < 11:
- result.append(better_angle % 10)
+ normalized_angle = ((angle % 360) // 30 + 1)
+ if 0 < normalized_angle < 11:
+ result.append(normalized_angle % 10)
return result
def is_phone_tastic(word):
- if nums_to_angle(text_to_nums(word)) % len(word) == 0:
- return True
+ return nums_to_angle(text_to_nums(word)) % len(word) == 0
- return False

Гергана обнови решението на 30.10.2022 14:35 (преди над 1 година)

numbers_and_letters = {0: " ", 2: "ABC", 3: "DEF", 4: "GHI", 5: "JKL", 6: "MNO", 7: "PQRS", 8: "TUV", 9: "WXYZ"}
letters_and_numbers = {" ": 0, "ABC": 2, "DEF": 3, "GHI": 4, "JKL": 5, "MNO": 6, "PQRS": 7, "TUV": 8, "WXYZ": 9}
def make_list_sets(my_list):
list_of_sets = []
length = len(my_list) - 1
index = 0
while index <= length:
counter = 1
if my_list[index] == 1:
index += 1
continue
while index < length and my_list[index] == my_list[index + 1]:
counter += 1
index += 1
list_of_sets.append((my_list[index], counter))
index += 1
return list_of_sets
def nums_to_text(nums):
nums_set = make_list_sets(nums)
result = ""
for item in nums_set:
digit = item[0]
times = item[1]
if digit == -1:
continue
if digit in (7, 9) and times > 4:
times = times % 4
elif digit == 0:
times = 1
elif times > 3:
times = times % 3
result += numbers_and_letters[digit][times - 1]
return result
def text_to_nums(text):
my_text = [letter.upper() for letter in text]
result = []
last_key = ''
for letter in my_text:
value = 0
position = 0
for key in letters_and_numbers.keys():
if letter not in key:
continue
else:
if last_key == key:
result.append(-1)
value = letters_and_numbers[key]
position = key.index(letter)
last_key = key
break
result.extend([value] * (position + 1))
return result
def nums_to_angle(nums):
result = 0
for number in nums:
if number == 0:
result += 10
result += number
result = (result * 30) % 360
return result
def angles_to_nums(angles):
result = []
for angle in angles:
if angle % 30 <= 15:
normalized_angle = (angle % 360) // 30
else:
- normalized_angle = ((angle % 360) // 30 + 1)
+ normalized_angle = ((angle % 360) // 30) + 1
if 0 < normalized_angle < 11:
result.append(normalized_angle % 10)
return result
def is_phone_tastic(word):
return nums_to_angle(text_to_nums(word)) % len(word) == 0

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

numbers_and_letters = {0: " ", 2: "ABC", 3: "DEF", 4: "GHI", 5: "JKL", 6: "MNO", 7: "PQRS", 8: "TUV", 9: "WXYZ"}
letters_and_numbers = {" ": 0, "ABC": 2, "DEF": 3, "GHI": 4, "JKL": 5, "MNO": 6, "PQRS": 7, "TUV": 8, "WXYZ": 9}
def make_list_sets(my_list):
list_of_sets = []
length = len(my_list) - 1
index = 0
while index <= length:
counter = 1
if my_list[index] == 1:
index += 1
continue
while index < length and my_list[index] == my_list[index + 1]:
counter += 1
index += 1
list_of_sets.append((my_list[index], counter))
index += 1
return list_of_sets
def nums_to_text(nums):
nums_set = make_list_sets(nums)
result = ""
for item in nums_set:
digit = item[0]
times = item[1]
if digit == -1:
continue
- if digit in (7, 9) and times > 4:
+ if digit in (7, 9) and times >= 4:
times = times % 4
elif digit == 0:
- times = 1
+ result += ' ' * times
+ continue
elif times > 3:
times = times % 3
result += numbers_and_letters[digit][times - 1]
return result
def text_to_nums(text):
my_text = [letter.upper() for letter in text]
result = []
last_key = ''
for letter in my_text:
value = 0
position = 0
for key in letters_and_numbers.keys():
if letter not in key:
continue
else:
if last_key == key:
result.append(-1)
value = letters_and_numbers[key]
position = key.index(letter)
last_key = key
break
result.extend([value] * (position + 1))
return result
def nums_to_angle(nums):
result = 0
for number in nums:
if number == 0:
result += 10
result += number
result = (result * 30) % 360
return result
def angles_to_nums(angles):
result = []
for angle in angles:
if angle % 30 <= 15:
normalized_angle = (angle % 360) // 30
else:
normalized_angle = ((angle % 360) // 30) + 1
if 0 < normalized_angle < 11:
result.append(normalized_angle % 10)
return result
def is_phone_tastic(word):
return nums_to_angle(text_to_nums(word)) % len(word) == 0