[アルゴリズムの問題][1ラウンド目]ダーツゲーム


質問する


KakaoTalkゲームスターは下半期にダーツゲームを新サービスとして発売する.ダーツゲームは、ボードに3回ダーツを投げ、点数の和で実力を競うゲームで、簡単に楽しめます.
入社したばかりの武智はコード力が認められ、ゲームの核心部分である採点ロジックを担当した.ダーツゲームの得点ロジックは以下の通りです.
ダーツゲームは全部で3回のチャンスがあります.
チャンスごとに得られる点数は0点から10点までです.
点数とともに単(S)、双(D)、三(T)領域が存在し、各領域で当選した場合、点数から1平方、2平方、3平方(点数1、点数2、点数3)を算出する.
オプションとしては、スター賞()、阿差賞(#)、スター賞()の当選時に該当する点数と、それまでに獲得した点数がそれぞれ2倍になる.阿次賞(#)が当選した時、この点数は負数だった.
スター賞()も初の機会に登場することができます.このような状況で、最初のスター賞()の点数は2倍になった.(例4参照)
スター賞()の効果は他のスター賞()の効果と重なる可能性があります.このような状況で重なるスター賞()の点数は4倍だ.(例4参照)
星相()の効果は、亜星相(#)の効果と重なる可能性があります.この場合、重なったアッチャ賞(#)の点数は-2倍です.(例5参照)
単一(S)、二重(D)、三(T)の各スコアは1つ存在する.
スター賞()、阿查賞(#)は点数ごとに1つしか存在しないし、存在しないかもしれない.
0~10の整数と、アルファベットS、D、T、および#からなる文字列を入力すると、合計スコアが返される関数を作成します.
入力フォーマット
「スコア|加算|オプション」からなる文字列3組.
例)1 S 2 D*3 T
スコアは0~10の整数です.
ボーナスはS、D、Tの一つです.
破線は*または#のいずれかで、ない可能性があります.
出力フォーマット
3回の機会で得られたスコアの合計の整数値を出力します.
例)37

コード#コード#

function solution(dartResult) {
    let index = 0;
    let round = 0;
    let score = [];
    while (dartResult[index]) {
        score[round] = Number(dartResult[index]);
        index++;
        if (dartResult[index] === '0') {
            score[round] = 10;
            index++;
        }
        if (dartResult[index] === 'D') score[round] = Math.pow(score[round], 2);
        if (dartResult[index] === 'T') score[round] = Math.pow(score[round], 3);
        index++;
        if (dartResult[index] === '*' || dartResult[index] === '#') {
            if (dartResult[index] === '*') {
                score[round] *= 2;
                score[round - 1] *= 2;
            }
            if (dartResult[index] === '#') score[round] *= -1;
            index++;
        }
        round++;
    }
    return score[0] + score[1] + score[2];
}

に答える


while文で逐字チェックしてインデックスを追加
出典:プログラマーコードテスト練習、https://programmers.co.kr/learn/challenges