[プログラマー]ダーツゲーム
13631 ワード
問題の説明
ダーツゲーム
KakaoTalkの4番目の星!退屈な時?KakaoTalkゲームスター~
ダーツボードに3回ダーツを投げ、点数の和で実力を競うゲームは、誰でも気軽に楽しめます.
入社したばかりの武智はコード力が認められ、ゲームの核心部分である採点ロジックを担当した.ダーツゲームの得点ロジックは以下の通りです.
1平方、2平方、3平方(分数1、分数2、分数3)で計算します.
入力フォーマット
3組の文字列は、スコア|加算|「オプション」で構成されています.
例)1 S 2 D*3 T
出力フォーマット
3回の機会で得られたスコアの合計の整数値を出力します.
例)37
I/O例
に答える
function solution(_dartResult) {
let dartResult = [..._dartResult];
let parseDartResult = [];
let temp = [];
let cursor = 0;
let tempStr = '';
const multiplication = (item, index, origin) => {
if (index === origin.length - 1 || index === origin.length - 2) {
return (item *= 2);
}
return item;
};
const negative = (item, index, origin) => {
if (index === origin.length - 1) {
return -item;
}
return item;
};
const add = (prev, acc) => (prev += acc);
while (cursor < dartResult.length) {
const currentValue = dartResult[cursor];
if (isNaN(parseInt(currentValue))) {
tempStr += currentValue;
parseDartResult.push(tempStr);
cursor = 0;
tempStr = '';
} else {
tempStr += currentValue;
}
dartResult.shift();
}
parseDartResult.forEach((item) => {
if (item.indexOf('S') > -1) {
temp.push((+item.split('S')[0]) ** 1);
}
if (item.indexOf('D') > -1) {
temp.push((+item.split('D')[0]) ** 2);
}
if (item.indexOf('T') > -1) {
temp.push((+item.split('T')[0]) ** 3);
}
if (item === '*') {
temp = temp.map(multiplication);
}
if (item === '#') {
temp = temp.map(negative);
}
});
return temp.reduce(add, 0);
}
Reference
この問題について([プログラマー]ダーツゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@awesomelon/프로그래머스-다트게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol