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

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

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

Резултати

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

Код

num_to_letter = {(2, 1): 'A', (2, 2): 'B', (2, 0): 'C', (3, 1): 'D', (3, 2): 'E', (3, 0): 'F', (4, 1): 'G', (4, 2): 'H',
(4, 0): 'I', (5, 1): 'J', (5, 2): 'K', (5, 0): 'L', (6, 1): 'M', (6, 2): 'N', (6, 0): 'O', (7, 1): 'P',
(7, 2): 'Q', (7, 3): 'R', (7, 0): 'S', (8, 1): 'T', (8, 2): 'U', (8, 0): 'V', (9, 1): 'W', (9, 2): 'X',
(9, 3): 'Y', (9, 0): 'Z', (0, 1): ' '}
letter_to_num = {}
for key in num_to_letter:
val = num_to_letter[key]
letter_to_num[val] = key
def nums_to_text(nums):
word = ''
digit = -2
count = 0
for i in nums:
if i == digit:
count += 1
else:
if count == 0:
digit = i
count += 1
else:
if digit == 7 or digit == 9:
count %= 4
elif digit == 0:
count = 1
else:
count %= 3
if digit != -1 and digit != 1:
word += num_to_letter[(digit, count)]
count = 1
digit = i
if digit == 7 or digit == 9:
count %= 4
elif digit == 0:
count = 1
else:
count %= 3
if digit != -1 and digit != 1:
word += num_to_letter[(digit, count)]
return word
def text_to_nums(text):
text = text.upper()
list_of_nums = []
previous_digit = -2
for letter in text:
digit, count = letter_to_num[letter]
if count == 0:
if digit == 7 or digit == 9:
count = 4
else:
count = 3
if digit == previous_digit:
list_of_nums.append(-1)
previous_digit = digit
while count != 0:
list_of_nums.append(digit)
count -= 1
return list_of_nums
def nums_to_angle(nums):
sum_of_angles = 0
for digit in nums:
sum_of_angles += (digit * 30)
sum_of_angles %= 360
return sum_of_angles
def angles_to_nums(angles):
nums = []
for angle in angles:
angle %= 360
if angle % 30 <= 15:
angle -= (angle % 30)
else:
angle = angle - (angle % 30) + 30
if angle == 360:
angle = 0
if angle == 0 or angle == 330:
continue
else:
nums.append(angle//30)
return nums
def is_phone_tastic(word):
nums_list = text_to_nums(word)
angle = nums_to_angle(nums_list)
if len(word) != 0 and angle % len(word) == 0:
return True
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
KeyError: (-2, 0)

======================================================================
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.360s

FAILED (failures=3, errors=1)

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

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

+num_to_letter = {(2, 1): 'A', (2, 2): 'B', (2, 0): 'C', (3, 1): 'D', (3, 2): 'E', (3, 0): 'F', (4, 1): 'G', (4, 2): 'H',
+ (4, 0): 'I', (5, 1): 'J', (5, 2): 'K', (5, 0): 'L', (6, 1): 'M', (6, 2): 'N', (6, 0): 'O', (7, 1): 'P',
+ (7, 2): 'Q', (7, 3): 'R', (7, 0): 'S', (8, 1): 'T', (8, 2): 'U', (8, 0): 'V', (9, 1): 'W', (9, 2): 'X',
+ (9, 3): 'Y', (9, 0): 'Z', (0, 1): ' '}
+letter_to_num = {}
+for key in num_to_letter:
+ val = num_to_letter[key]
+ letter_to_num[val] = key
+
+
+def nums_to_text(nums):
+ word = ''
+ digit = -2
+ count = 0
+ for i in nums:
+ if i == digit:
+ count += 1
+ else:
+ if count == 0:
+ digit = i
+ count += 1
+ else:
+ if digit == 7 or digit == 9:
+ count %= 4
+ elif digit == 0:
+ count = 1
+ else:
+ count %= 3
+ if digit != -1 and digit != 1:
+ word += num_to_letter[(digit, count)]
+ count = 1
+ digit = i
+ if digit == 7 or digit == 9:
+ count %= 4
+ elif digit == 0:
+ count = 1
+ else:
+ count %= 3
+ if digit != -1 and digit != 1:
+ word += num_to_letter[(digit, count)]
+ return word
+
+
+def text_to_nums(text):
+ text = text.upper()
+ list_of_nums = []
+ previous_digit = -2
+ for letter in text:
+ digit, count = letter_to_num[letter]
+ if count == 0:
+ if digit == 7 or digit == 9:
+ count = 4
+ else:
+ count = 3
+ if digit == previous_digit:
+ list_of_nums.append(-1)
+ previous_digit = digit
+ while count != 0:
+ list_of_nums.append(digit)
+ count -= 1
+ return list_of_nums
+
+
+def nums_to_angle(nums):
+ sum_of_angles = 0
+ for digit in nums:
+ sum_of_angles += (digit * 30)
+ sum_of_angles %= 360
+ return sum_of_angles
+
+
+def angles_to_nums(angles):
+ nums = []
+ for angle in angles:
+ angle %= 360
+ if angle % 30 <= 15:
+ angle -= (angle % 30)
+ else:
+ angle = angle - (angle % 30) + 30
+ if angle == 360:
+ angle = 0
+ if angle == 0 or angle == 330:
+ continue
+ else:
+ nums.append(angle//30)
+ return nums
+
+
+def is_phone_tastic(word):
+ nums_list = text_to_nums(word)
+ angle = nums_to_angle(nums_list)
+ if len(word) == 0:
+ return False
+ if angle % len(word) == 0:
+ return True
+ else:
+ return False
+

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

num_to_letter = {(2, 1): 'A', (2, 2): 'B', (2, 0): 'C', (3, 1): 'D', (3, 2): 'E', (3, 0): 'F', (4, 1): 'G', (4, 2): 'H',
(4, 0): 'I', (5, 1): 'J', (5, 2): 'K', (5, 0): 'L', (6, 1): 'M', (6, 2): 'N', (6, 0): 'O', (7, 1): 'P',
(7, 2): 'Q', (7, 3): 'R', (7, 0): 'S', (8, 1): 'T', (8, 2): 'U', (8, 0): 'V', (9, 1): 'W', (9, 2): 'X',
(9, 3): 'Y', (9, 0): 'Z', (0, 1): ' '}
letter_to_num = {}
for key in num_to_letter:
val = num_to_letter[key]
letter_to_num[val] = key
def nums_to_text(nums):
word = ''
digit = -2
count = 0
for i in nums:
if i == digit:
count += 1
else:
if count == 0:
digit = i
count += 1
else:
if digit == 7 or digit == 9:
count %= 4
elif digit == 0:
count = 1
else:
count %= 3
if digit != -1 and digit != 1:
word += num_to_letter[(digit, count)]
count = 1
digit = i
if digit == 7 or digit == 9:
count %= 4
elif digit == 0:
count = 1
else:
count %= 3
if digit != -1 and digit != 1:
word += num_to_letter[(digit, count)]
return word
def text_to_nums(text):
text = text.upper()
list_of_nums = []
previous_digit = -2
for letter in text:
digit, count = letter_to_num[letter]
if count == 0:
if digit == 7 or digit == 9:
count = 4
else:
count = 3
if digit == previous_digit:
list_of_nums.append(-1)
previous_digit = digit
while count != 0:
list_of_nums.append(digit)
count -= 1
return list_of_nums
def nums_to_angle(nums):
sum_of_angles = 0
for digit in nums:
sum_of_angles += (digit * 30)
sum_of_angles %= 360
return sum_of_angles
def angles_to_nums(angles):
nums = []
for angle in angles:
angle %= 360
- if angle % 30 <= 15:
+ if angle % 30 <= 15:
angle -= (angle % 30)
else:
angle = angle - (angle % 30) + 30
if angle == 360:
angle = 0
if angle == 0 or angle == 330:
continue
else:
nums.append(angle//30)
return nums
def is_phone_tastic(word):
nums_list = text_to_nums(word)
angle = nums_to_angle(nums_list)
- if len(word) == 0:
- return False
- if angle % len(word) == 0:
+ if len(word) != 0 and angle % len(word) == 0:
return True
- else:
- return False
+ return False