https://school.programmers.co.kr/learn/courses/30/lessons/17682
function solution(dartResult) {
const dart = dartResult.split("");
let answer = [];
let numberPointer = 0;
let signPointer = 1;
let currentNumber;
while (signPointer < dartResult.length) {
if (dart[numberPointer] == "1" && dart[signPointer] == "0") {
currentNumber = 10;
signPointer += 1;
} else {
currentNumber = Number(dart[numberPointer]);
}
while (signPointer < dartResult.length && isNaN(dart[signPointer])) {
const sign = dart[signPointer];
if (sign === "S") {
currentNumber = currentNumber;
} else if (sign === "D") {
currentNumber = currentNumber ** 2;
} else if (sign === "T") {
currentNumber = currentNumber ** 3;
} else if (sign === "*") {
currentNumber *= 2;
if (answer.length != 0) {
answer[answer.length - 1] *= 2;
}
} else if (sign === "#") {
currentNumber *= -1;
}
signPointer += 1;
}
answer.push(currentNumber);
numberPointer = signPointer;
signPointer += 1;
}
return answer.reduce((p, c)=>p+c);
}
function solution(dartResult) {
const bonus = { 'S': 1, 'D': 2, 'T': 3 },
options = { '*': 2, '#': -1, undefined: 1 };
let darts = dartResult.match(/\d.?\D/g);
for (let i = 0; i < darts.length; i++) {
let split = darts[i].match(/(^\d{1,})(S|D|T)(\*|#)?/),
score = Math.pow(split[1], bonus[split[2]]) * options[split[3]];
if (split[3] === '*' && darts[i - 1]) darts[i - 1] *= options['*'];
darts[i] = score;
}
return darts.reduce((a, b) => a + b);
}