Algorithm/codewars
Catching Car Mileage Numbers 답안
Bonita SY
2021. 4. 1. 18:43
728x90
문제)
www.codewars.com/kata/52c4dd683bfd3b434c000292/train/python
Codewars: Achieve mastery through challenge
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.
www.codewars.com
내가 푼 답)
def is_interesting(number, awesome_phrases):
if check_intersting(number, awesome_phrases):
return 2
else:
if check_intersting(number - 2, awesome_phrases) or check_intersting(number + 2, awesome_phrases):
return 1
elif check_intersting(number - 1, awesome_phrases) or check_intersting(number + 1, awesome_phrases):
return 1
return 0
def check_intersting(number, awesome_phrases):
if number < 100:
return False
if number in awesome_phrases:
return True
str_num = str(number)
number_len = len(str_num)
#increment
incre_val = []
for i in range(number_len):
tmp_val = int(str_num[0]) + i
if (tmp_val < 0) or (tmp_val > 9):
incre_val.append('0')
else:
incre_val.append(str(tmp_val))
if number == int(''.join(incre_val)):
return True
#decrememt
decre_val = []
for i in range(number_len):
tmp_val = int(str_num[0]) - i
if (tmp_val < 0) or (tmp_val > 9):
decre_val.append('0')
else:
decre_val.append(str(tmp_val))
if number == int(''.join(decre_val)):
return True
# all zeros
value = int(str_num[0] + ''.join([ '0' for _ in range(number_len-1)]))
if value == number:
return True
# same number
value = int(str_num[0] + ''.join([ str_num[0] for _ in range(number_len-1)]))
if value == number:
return True
#palindrome
center_num = number_len // 2
lp_list = []
rp_list = []
for i in range(center_num):
lp_list.append(str_num[i])
rp_list.append(str_num[number_len-1-i])
lp_str = ''.join(lp_list)
rp_str = ''.join(rp_list)
if number_len % 2 == 1:
lp_str += str_num[center_num]
rp_str += str_num[center_num]
lp_list.reverse()
rp_list.reverse()
lp_str += ''.join(lp_list)
rp_str += ''.join(rp_list)
if (number == int(lp_str)) or (number == int(rp_str)):
return True
return False
테스트 결과)
남이 푼 마음에 드는 답)
728x90