题解 | #坐标移动#
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
while ((line = await readline())) {
const position = createPosition(line);
console.log(position[0] + "," + position[1]);
}
})();
const DICT = {
A: "A",
D: "D",
W: "W",
S: "S",
};
function createPosition(line) {
const position = [0, 0];
// 字符串坐标转换成数组
const sPoistionArr = line.split(";");
// console.log(sPoistionArr)
// 验证坐标有效性
const validPositionArr = sPoistionArr.filter((position) => {
return isValidedPosition(position);
});
// console.log("有效坐标集合", validPositionArr);
// 转换坐标数组(解析)
const positionArr = parsePosition(validPositionArr);
// console.log("解析后的坐标", positionArr);
// 操作坐标
positionArr.forEach((pos) => {
position[0] += pos[0];
position[1] += pos[1];
});
return position;
}
// 解析坐标
function parsePosition(positionArr) {
return positionArr.map((positinStr) => {
const direction = positinStr[0];
const moveSize = positinStr.substr(1);
const position = [0, 0];
switch (direction) {
// 向左
case DICT.A:
position[0] = -Number(moveSize);
break;
// 向下
case DICT.D:
position[0] = Number(moveSize);
break;
// 向上
case DICT.W:
position[1] = Number(moveSize);
break;
// 向下
case DICT.S:
position[1] = -Number(moveSize);
break;
}
// console.log(direction, position);
return position;
});
}
// 验证坐标是否有效
function isValidedPosition(line) {
// 验证是否有效
return !!/^[a-zA-Z]{1}\d{1,2}$/.test(line);
}