Решение на Телефонна любов от Минчо Христов

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

Към профила на Минчо Христов

Резултати

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

Код

def nums_to_text(og_nums):
working_nums = og_nums
num_to_letters = {
"2*1": "a", "2*2": "b", "2*3": "c",
"3*1": "d", "3*2": "e", "3*3": "f",
"4*1": "g", "4*2": "h", "4*3": "i",
"5*1": "j", "5*2": "k", "5*3": "l",
"6*1": "m", "6*2": "n", "6*3": "o",
"7*1": "p", "7*2": "q", "7*3": "r", "7*4": "s",
"8*1": "t", "8*2": "u", "8*3": "v",
"9*1": "w", "9*2": "x", "9*3": "y", "9*4": "z",
"0*1": " ", "-1*1": "", "1*1": ""
}
final_text = ""
count_pos = 1
count_appearances = 1
working_nums.append("END")
in_check = working_nums[0]
size = len(working_nums)
while count_pos < size:
if in_check == working_nums[count_pos]:
count_appearances += 1
if count_appearances == 5 and in_check in [7, 9]:
count_appearances = 1
elif (count_appearances == 4 and in_check in [2, 3, 4, 5, 6, 8]) or (
count_appearances == 2 and in_check in [-1, 1, 0]
):
count_appearances = 1
else:
final_text += num_to_letters["{}*{}".format(in_check, count_appearances)]
count_appearances = 1
in_check = working_nums[count_pos]
count_pos += 1
return final_text
def text_to_nums(text):
letters_to_num = {
"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], "_": [0], "": [-1],
}
final_lst = []
text = text.lower()
for letter in text:
if final_lst and final_lst[-1] == letters_to_num[letter][0]:
final_lst.extend(letters_to_num[""])
final_lst.extend(letters_to_num[letter])
return final_lst
def nums_to_angle(nums):
final_num = 0
for num in nums:
if -1 < num < 10:
if num == 0:
num = 10
final_num += num * 30
final_num %= 360
return final_num
def angles_to_nums(angles):
final_nums = []
for angle in angles:
angle %= 360
if angle < 0:
angle += 360
if angle <= 15:
continue
elif angle <= 45:
angle = 30
elif angle <= 75:
angle = 60
elif angle <= 105:
angle = 90
elif angle <= 135:
angle = 120
elif angle <= 165:
angle = 150
elif angle <= 195:
angle = 180
elif angle <= 225:
angle = 210
elif angle <= 255:
angle = 240
elif angle <= 285:
angle = 270
elif angle <= 315:
angle = 300
else:
continue
angle /= 30
if angle == 10:
angle = 0
angle = int(angle)
final_nums.append(angle)
return final_nums
def is_phone_tastic(word):
if word == "":
return False
num = text_to_nums(word)
angle = nums_to_angle(num)
word_size = len(word)
phone_tastic = angle % word_size
if phone_tastic:
return False
else:
return True

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

.....................................
----------------------------------------------------------------------
Ran 37 tests in 0.318s

OK

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

Минчо обнови решението на 02.11.2022 21:56 (преди над 1 година)

+
+def nums_to_text(og_nums):
+
+ working_nums = og_nums
+ num_to_letters = {
+ "2*1": "a", "2*2": "b", "2*3": "c",
+ "3*1": "d", "3*2": "e", "3*3": "f",
+ "4*1": "g", "4*2": "h", "4*3": "i",
+ "5*1": "j", "5*2": "k", "5*3": "l",
+ "6*1": "m", "6*2": "n", "6*3": "o",
+ "7*1": "p", "7*2": "q", "7*3": "r", "7*4": "s",
+ "8*1": "t", "8*2": "u", "8*3": "v",
+ "9*1": "w", "9*2": "x", "9*3": "y", "9*4": "z",
+ "0*1": " ", "-1*1": "", "1*1": ""
+ }
+ final_text = ""
+ count_pos = 1
+ count_appearances = 1
+
+ working_nums.append("END")
+ in_check = working_nums[0]
+ size = len(working_nums)
+ while count_pos < size:
+ if in_check == working_nums[count_pos]:
+ count_appearances += 1
+ if count_appearances == 5 and in_check in [7, 9]:
+ count_appearances = 1
+ elif (count_appearances == 4 and in_check in [2, 3, 4, 5, 6, 8]) or (
+ count_appearances == 2 and in_check in [-1, 1, 0]
+ ):
+ count_appearances = 1
+ else:
+ final_text += num_to_letters["{}*{}".format(in_check, count_appearances)]
+ count_appearances = 1
+ in_check = working_nums[count_pos]
+ count_pos += 1
+ return final_text
+
+
+def text_to_nums(text):
+
+ letters_to_num = {
+ "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], "_": [0], "": [-1],
+ }
+ final_lst = []
+ text = text.lower()
+
+ for letter in text:
+ if final_lst and final_lst[-1] == letters_to_num[letter][0]:
+ final_lst.extend(letters_to_num[""])
+ final_lst.extend(letters_to_num[letter])
+ return final_lst
+
+
+def nums_to_angle(nums):
+ final_num = 0
+ for num in nums:
+ if -1 < num < 10:
+ final_num += num * 30
+ final_num %= 360
+ return final_num
+
+
+def angles_to_nums(angles):
+ final_nums = []
+ for angle in angles:
+ angle %= 360
+ if angle < 0:
+ angle += 360
+ if angle <= 15:
+ continue
+ elif angle <= 45:
+ angle = 30
+ elif angle <= 75:
+ angle = 60
+ elif angle <= 105:
+ angle = 90
+ elif angle <= 135:
+ angle = 120
+ elif angle <= 165:
+ angle = 150
+ elif angle <= 195:
+ angle = 180
+ elif angle <= 225:
+ angle = 210
+ elif angle <= 255:
+ angle = 240
+ elif angle <= 285:
+ angle = 270
+ elif angle <= 315:
+ angle = 300
+ else:
+ continue
+ angle /= 30
+ if angle == 10:
+ angle = 0
+ angle = int(angle)
+ final_nums.append(angle)
+ return final_nums
+
+
+def is_phone_tastic(word):
+ num = text_to_nums(word)
+ angle = nums_to_angle(num)
+ word_size = len(word)
+ phone_tastic = angle % word_size
+ if phone_tastic:
+ return False
+ else:
+ return True

Минчо обнови решението на 03.11.2022 09:04 (преди над 1 година)

def nums_to_text(og_nums):
-
+
working_nums = og_nums
num_to_letters = {
"2*1": "a", "2*2": "b", "2*3": "c",
"3*1": "d", "3*2": "e", "3*3": "f",
"4*1": "g", "4*2": "h", "4*3": "i",
"5*1": "j", "5*2": "k", "5*3": "l",
"6*1": "m", "6*2": "n", "6*3": "o",
"7*1": "p", "7*2": "q", "7*3": "r", "7*4": "s",
"8*1": "t", "8*2": "u", "8*3": "v",
"9*1": "w", "9*2": "x", "9*3": "y", "9*4": "z",
"0*1": " ", "-1*1": "", "1*1": ""
}
final_text = ""
count_pos = 1
count_appearances = 1
working_nums.append("END")
in_check = working_nums[0]
size = len(working_nums)
while count_pos < size:
if in_check == working_nums[count_pos]:
count_appearances += 1
if count_appearances == 5 and in_check in [7, 9]:
count_appearances = 1
elif (count_appearances == 4 and in_check in [2, 3, 4, 5, 6, 8]) or (
count_appearances == 2 and in_check in [-1, 1, 0]
):
count_appearances = 1
else:
final_text += num_to_letters["{}*{}".format(in_check, count_appearances)]
count_appearances = 1
in_check = working_nums[count_pos]
count_pos += 1
return final_text
def text_to_nums(text):
letters_to_num = {
"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], "_": [0], "": [-1],
}
final_lst = []
text = text.lower()
for letter in text:
if final_lst and final_lst[-1] == letters_to_num[letter][0]:
final_lst.extend(letters_to_num[""])
final_lst.extend(letters_to_num[letter])
return final_lst
def nums_to_angle(nums):
final_num = 0
for num in nums:
if -1 < num < 10:
+ if num == 0:
+ num = 10
final_num += num * 30
final_num %= 360
return final_num
def angles_to_nums(angles):
final_nums = []
for angle in angles:
angle %= 360
if angle < 0:
angle += 360
if angle <= 15:
continue
elif angle <= 45:
angle = 30
elif angle <= 75:
angle = 60
elif angle <= 105:
angle = 90
elif angle <= 135:
angle = 120
elif angle <= 165:
angle = 150
elif angle <= 195:
angle = 180
elif angle <= 225:
angle = 210
elif angle <= 255:
angle = 240
elif angle <= 285:
angle = 270
elif angle <= 315:
angle = 300
else:
continue
angle /= 30
if angle == 10:
angle = 0
angle = int(angle)
final_nums.append(angle)
return final_nums
def is_phone_tastic(word):
+
+ if word == "":
+ return False
num = text_to_nums(word)
angle = nums_to_angle(num)
word_size = len(word)
phone_tastic = angle % word_size
if phone_tastic:
return False
else:
return True