먼저 하나의 계산식이 구성되는 패턴에 대해 정의했습니다.
하나의 계산식은 [숫자], [제곱의계수(SDT)], [상점(2배 혹은 -1배)]
이런 패턴과 같이 이루어져있습니다.
그래서 이 패턴을 정규표현식(/\d+(S|D|T)(\*|\#)?/g
)을 이용해 검출하였습니다.
그 이후에는 각 문자에 따라 잘 계산될 수 있도록 처리를 해주었습니다.
let solution = (dartResult) => {
let numbers = [];
dartResult.match(/\d+(S|D|T)(\*|\#)?/g).map((token, index) => {
let sdt = token.includes("S") ? 1 : token.includes("D") ? 2 : 3;
let award = token.includes("*") ? 2 : token.includes("#") ? -1 : 1;
if(index !== 0 && award === 2)
numbers[index-1] *= 2;
numbers.push(Math.pow(+token.match(/\d+/g)[0], sdt) * award);
});
return numbers.reduce((a, c) => a + c);
}