坐标移动

题目描述

题目要求:

开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面

输入:

合法坐标为A(或者D或者W或者S) + 数字(两位以内)
坐标之间以;分隔。
非法坐标点需要进行丢弃。如AA10; A1A; $%$; YAD; 等。

数据范围

每组输入的字符串长度满足 1\le n \le 10000 \1≤n≤10000 ,坐标保证满足 -231 ≤x, y≤ 231-1,且数字部分仅含正数

举例

A10;S20;W10;D30;X;A1A;B10A11;;A10;

  • 处理过程:
    起点(0,0)
    A10 = (-10,0)
    S20 = (-10,-20)
    W10 = (-10,-10)
    D30 = (20,-10)
    x = 无效
    A1A = 无效
    B10A11 = 无效
    一个空 不影响
    A10 = (10,-10)
  • 结果 (10, -10)

解题思路

  1. 拿到输入的数据,运用split()以分号拆分为数组
  2. 定义一个数组,存放原点的位置
  3. 根据要求定义正则表达式(以ASWD中任一个字母开头,后跟数字一位或两位)
  4. 利用数组forEach()方法遍历数组
  5. 以字符串的第一个字母作为判断加减的依据
  6. slice:从下标为1开始截取剩余的字符串,*1是为了转换为number

解题代码

let arr=readline().split(';');
let position=[0,0];
let reg=/^[ASWD]\d{1,2}$/
arr.forEach(item=>{
    if(reg.test(item)){  
        switch(item[0]){
            case 'A':
                position[0]-=item.slice(1)*1;
                break;
            case 'D':
                position[0]+=item.slice(1)*1;
                break;
            case 'W':
                position[1]+=item.slice(1)*1;
                break;
            case 'S':
                position[1]-=item.slice(1)*1;
                break;
        }
    }
})
console.log(position)
posted @ 2022-07-27 23:08  fionna  阅读(40)  评论(0编辑  收藏  举报