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
반응형

'Algorithm > codewars' 카테고리의 다른 글

Credit Card Mask 답안  (0) 2021.04.01
Format a string of names like 'Bart, Lisa & Maggie'. 답안  (0) 2021.04.01
Adding Big Numbers 답안  (0) 2021.03.30
Directions Reduction 답안  (0) 2021.03.30
Sum by Factors 답안  (0) 2021.03.30