コードブック#5キーボードを押す
2518 ワード
マイコード
function solution(numbers, hand) {
let answer = "";
keypad = {
1: [0, 0],
2: [0, 1],
3: [0, 2],
4: [1, 0],
5: [1, 1],
6: [1, 2],
7: [2, 0],
8: [2, 1],
9: [2, 2],
"*": [3, 0],
0: [3, 1],
"#": [3, 2],
};
let num = 0;
let leftPosition = keypad["*"];
let rightPosition = keypad["#"];
let distance_left = 0;
let distance_right = 0;
for (let i = 0; i < numbers.length; i++) {
num = keypad[numbers[i]];
if (num[1] == 0) {
answer += "L";
leftPosition = num;
} else if (num[1] == 2) {
answer += "R";
rightPosition = num;
} else if (num[1] == 1) {
distance_left =
Math.abs(num[0] - leftPosition[0]) + Math.abs(num[1] - leftPosition[1]);
distance_right =
Math.abs(num[0] - rightPosition[0]) +
Math.abs(num[1] - rightPosition[1]);
if (distance_left < distance_right) {
answer += "L";
leftPosition = num;
} else if (distance_left > distance_right) {
answer += "R";
rightPosition = num;
} else if (distance_left == distance_right) {
if (hand == "left") {
answer += "L";
leftPosition = num;
} else if (hand == "right") {
answer += "R";
rightPosition = num;
}
}
}
}
return answer;
}
さいてきコード
function solution(numbers, hand) {
hand = hand[0] === "r" ? "R" : "L"
let position = [1, 4, 4, 4, 3, 3, 3, 2, 2, 2]
let h = { L: [1, 1], R: [1, 1] }
return numbers.map(x => {
if (/[147]/.test(x)) {
h.L = [position[x], 1]
return "L"
}
if (/[369]/.test(x)) {
h.R = [position[x], 1]
return "R"
}
let distL = Math.abs(position[x] - h.L[0]) + h.L[1]
let distR = Math.abs(position[x] - h.R[0]) + h.R[1]
if (distL === distR) {
h[hand] = [position[x], 0]
return hand
}
if (distL < distR) {
h.L = [position[x], 0]
return "L"
}
h.R = [position[x], 0]
return "R"
}).join("")
}
に感銘を与える
高校以降に描かれたことのない二次関数を用いて,キーボードをイメージ化し,キーボード変数を作成し,それを用いて解く.最適なコードは、アレイ内の各要素に対して関数を実行し、結果をアレイのmap関数と正規表現に返します.そして生まれて初めて見た3つの条件演算子などを用いた.変数ポーズとhはまだ理解できません.これはこれまでの5つの問題の中で最も困難な1つである.
Reference
この問題について(コードブック#5キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@kimtothechang/코딩익힘책-5-키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol