ダーツゲーム
11647 ワード
説明:プログラミングダーツ
概要:ダーツゲームを作るには、採点ロジックを作成します.
計算ロジックは以下の通りです.ダーツゲームは3回のチャンスがあります. の機会ごとに0点から10点を得ることができます. 点は単(S)、双(D)、三(T)領域が同時に存在し、各領域で当選した場合、スコアから1平方、2平方、3平方(スコア1、スコア2、スコア3)を算出する. オプションでは、スター賞()、阿差賞(#)、スター賞()の当選時に該当する点数と、それまでに獲得した点数がそれぞれ2倍になります.阿次賞(#)が当選した時、この点数は負数だった. スター賞()も最初の機会に登場することができます.このような状況で、最初のスター賞()の点数は2倍になった.(例4参照) スター賞()の効果は、他のスター賞()の効果と重なる可能性があります.そんな中、重なるスター賞(*)の点数は4倍.(例4参照) スター賞(*)の効果は「アチャ賞」(#)の効果と重なる可能性があります.この場合、重なったアッチャ賞(#)の点数は-2倍です.(例5参照)
単一(S)、二重(D)、三(T)の各スコアは1つ存在する. スター賞(*)、雅察賞(#)は1点ごとに1つしか存在しないし、存在しないかもしれない. 0~10の整数と、アルファベットS、D、T、*、および#からなる文字列を入力すると、合計スコアが返される関数を作成します.
I/O例:
考え:の実力はまだあまりよくないので、大きなフレームを作ってコンソールデバッグで解きたいです. の大きなフレームワークは「スコア|加算|[オプション]」で構成されているので、for文を先に回し、最初の条件文でスコアロジックを構成します.そして何か賞が出たときに前の数字と重なるので、ロジックを追加しました. また,スコア構成は0点から10点までであるため,for文を逐字数字に変換する過程について論理的に考えた.
概要:ダーツゲームを作るには、採点ロジックを作成します.
計算ロジックは以下の通りです.
単一(S)、二重(D)、三(T)の各スコアは1つ存在する.
I/O例:
考え:
function solution(dartResult) {
const bouns = { S: 1, D: 2, T: 3 };// 먼저 보너스의 배율을 객체화시켜 혼동이 없게 하고
let temp = 0;// 임시로 저장할 곳을 선언한다.
let result = []; //결과
for (let i = 0; i < dartResult.length; i++) {// 다트 결과를 담은 결과 string를 처음부터 끝까지 forloop을 한번 돌린다.
if (dartResult[i] >= 0 && dartResult[i] <= 9) {// 이 부분에서 조금 문제가 있었다.
if (dartResult[i] == 1 && dartResult[i + 1] == 0) { // 이부분은 10을 골라내는 부분이다.
temp = 10;//10이 있으면 10을 담아준다.
i++;// 이부분을 생각을 못했는데 dartResult[i] == 1 이기 때문에 굳이 다음 0를 loop을 안돌아도된다. 만약에 0도 loop을 돈다면 이상한 숫자가 푸쉬된다.
} else {
temp = dartResult[i];
}
} else if (
dartResult[i] === "S" ||
dartResult[i] === "D" ||
dartResult[i] === "T"
) {
temp = Math.pow(temp, bouns[dartResult[i]]); //보너스를 temp에 담겨 있는 거듭 제곱을 하는 부분
if (dartResult[i + 1] === "*" || dartResult[i + 1] === "#") { // 또 그 loop을 돌고 있는 부분 다음에 *과 # 있으면 계속 loop을 돌고
continue;
} else {
// 아니면 결과 배열에 푸쉬
result.push(temp);
temp = 0; //그리고 초기화
}
} else if (dartResult[i] === "*") {//loop이 돌면서 *를만나면 temp 부분을 2를 곱하고
temp = temp * 2;
if (result[result.length - 1]) { //만약에 그 전 점수까지도 2를 곱해준다.
result[result.length - 1] = result[result.length - 1] * 2;
}
result.push(temp);
temp = 0;
} else {
temp = temp * -1; // 이부분은 # 부분이고 -1로 바꿔 준다.
result.push(temp);
temp = 0;
}
}
return result.reduce((a, c) => a + c); // 배열을 다 더해준다.
}
振り返る:ほっとして、長い時間がかかったようです.他の人のハーモニーを見て反応しましょうReference
この問題について(ダーツゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@godkor200/다트-게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol