[CG]ダーツゲーム


ダーツゲーム
# by me
def solution(dartResult):
    answer = []
    num=1 # 곱할 숫자
    temp=0 # 이전 연산
    dartResult = list(dartResult)
    for i in range(len(dartResult)):
        s=dartResult[i]
        if s=='0' and dartResult[i-1]=='1': s='10'
        #10을 찾기 위함
        if s=='1' and i!=len(dartResult)-1 and dartResult[i+1]=='0': continue
        # 1이 아니라 10이면 0일때 처리하기 위함
        if s.isalpha(): # 문자일때
            if s=='S':
                temp= (num)
            elif s=='D':
                temp= (num)**2
            elif s=='T':
                temp= (num)**3
        elif s.isnumeric(): # 숫자일때
            answer.append(temp) # 이때 값을 넣어줌. 숫자가 나오면 이전 결과를 모두 처리했다 인식
            num = int(s)
        else: # 그 외 *,#일때
            if s=='*':
                answer[-1]*=2 # 이전 값 *2, 맨 첫이어도 오류가 안나는 이유는 차례가 숫자일 때 0부터 넣기 때문이다.
                temp*=2 # 현재 값 *2
            elif s=='#':
                # minus
                temp*=(-1)
        print(answer)
    answer.append(temp)
    return sum(answer)
全体的に長く、効率的ではありません.10後になって、コードに合わせるために奇妙な異常を処理したことに気づきました...始まりました.
import re


def solution(dartResult):
    bonus = {'S' : 1, 'D' : 2, 'T' : 3}
    option = {'' : 1, '*' : 2, '#' : -1}
    p = re.compile('(\d+)([SDT])([*#]?)')
    dart = p.findall(dartResult)
    for i in range(len(dart)):
        if dart[i][2] == '*' and i > 0:
            dart[i-1] *= 2
        dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]]

    answer = sum(dart)
    return answer
正規の食品を使うのはよさそうです.通常の処理が必要な演算範囲を指定できるため...
def solution(dartResult):
    point = []
    answer = []
    dartResult = dartResult.replace('10','k')
    point = ['10' if i == 'k' else i for i in dartResult]
    print(point)

    i = -1
    sdt = ['S', 'D', 'T']
    for j in point:
        if j in sdt :
            answer[i] = answer[i] ** (sdt.index(j)+1)
        elif j == '*':
            answer[i] = answer[i] * 2
            if i != 0 :
                answer[i - 1] = answer[i - 1] * 2
        elif j == '#':
            answer[i] = answer[i] * (-1)
        else:
            answer.append(int(j))
            i += 1
    return sum(answer)
10例外処理が印象的でした.また,SDTを配列として利用することも学習に値する.