[CG]ダーツゲーム
16132 ワード
ダーツゲーム
# 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を配列として利用することも学習に値する.Reference
この問題について([CG]ダーツゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@kinnyeri/PG-다트게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol