SOURCE

// 移动坐标
function move(str) {
     const arr = str.split(';'), len = arr.length,
        res = { x:0, y:0 },
        re = /^[AWSD][0-9]{1,2}$/

     for(let i= 0; i< len; i++) {
            const word = arr[i].slice(0, 1)
        if(re.test(arr[i])) {
            const num = parseInt(arr[i].slice(1) || 0, 10)
            console.log(i, word, num)
            switch(word) {
                case 'A':
                    res.x -= num
                    break
                case 'D':
                    res.x += num
                    break
                case 'W':
                    res.y += num
                    break
                case 'S':
                    res.y -= num
                    break
                default:
                    res.x = res.y = 0
                    break
            }
        }
    }
    return res
}

// console.log(move(`S87;S7;W56;S75;A8;S84;W23;W19;W40;D73;S87;A39;W97;W78;
// A53;D16;D15;A50;W41;S87;D47;W56;D56;A23;A91;S25;D61;D53;D58;W88;W58;S61;
// D69;W74;D89;A92;D39;D62;S78;W72;W73;W35;S76;W35;S36;W39;A4;`))

// 字符串排序
function sortStr(s) {
    const arrStr = Array.from(s),
        len = arrStr.length,
        arr = []
    for(let i = 0; i < 26; i++) {
        for(let j= 0; j<len; j++) {
            if((s.charCodeAt(j) - 65 === i) || (s.charCodeAt(j) - 97 === i)) {
                arr.push(s[j])
            }
        }
    }

    for(let i = 0, k = 0; i < len; i++) {
        const code = s.charCodeAt(i)
        if((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {
            arrStr[i] = arr[k++]
        }
    }
    return arrStr.join('')
}
// console.log(sortStr('Ff,zZgy-da,Ac'))

// 查找回文串
var longestPalindrome = function(s) {
    const arrStr = Array.from(s),
        len = s.length,
    dp = Array(len).fill().map(() => Array(len))
    let start = 0, maxLen = 1

    for (let i = 0; i < len; i++) {
        dp[i][i] = true;
    }
    
    for(let L = 2; L <= len; L++) {
        for(let i = 0; i < len; i++) {
            let j = L + i - 1
            if( j >= len) break
            if(s[i] !== s[j]) {
                dp[i][j] = false
            } else {
                if(j -i < 3) {
                    dp[i][j] = true
                } else {
                    dp[i][j] = dp[i+1][j-1]
                }
            }

            if (dp[i][j] && j - i + 1 > maxLen) {
                maxLen = j - i + 1;
                start = i;
            }
        }
    }
    return arrStr.slice(start, start + maxLen).join('')
}
// console.table(findLindrome('tmikrmvnkzwffmuycgffiqnrepltnfvnggtmwkzmpjpcfuhmdcdlrupmqbimvppbnqinwcuidfckveonfgcknihwztkvrikfunegxfboluzjhxkoxdvdxoczqdkyjziqmjnnrbvcolyxijemlujjofuojdwfhcgzmmnsznhbv'))
console 命令行工具 X clear

                    
>
console