编辑代码

//程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。 
console.log("Hello JSRUN!   \n\n         - from NodeJS .");

/***********************************************************
题目:
将一组区间中所有重叠的区间进行合并,例如 [起点,终点] 这种方式
输入:[[1,3],[2,6],[15,18],[8,10],[10,11],[7,8]]
输出:[[1,6],[15,18],[7,11]]

或 Excel 行列转 数字
例如: "A3" -> [1, 3], "Z10" -> [26, 10], "AZ2" -> [52, 2], "BA30" -> [53, 30]
二选一
************************************************************/
// 第一题
// 复杂度 O(n^2)
function fn1(arr) {
    // 利用reduce处理数组,total:已经存在区间,current:当前的区间
    return arr.reduce((total, current) => {
        let state = 0 // 是否存在于历史区间中,1存在,0不存在
        // 用当前的区间与已经存在的区间对比
        total.map(item => {
            const e = item.slice(0)
            if (current[0] <= e[1] && current[1] >= e[1]) {
                // 如果当前的区间左边界小于某个区间的右边,大于区间的左边,则扩大右区间
                item[1] = current[1]
                state = 1
            }
            if (current[1] <= e[1] && current[1] >= e[0]) {
                // 如果当前的区间右边界小于某个区间的右边,大于区间的左边,则扩大左区间
                item[0] = current[0]
                state = 1
            }
        })
        if (!state) total.push(current) // 如果没有历史区间,就加入到新的区间范围中
        return total
    }, [])
}
console.log(fn1([[1, 3], [2, 6], [15, 18], [8, 10], [10, 11], [7, 8]]))

// 第二题
function fn2(str) {
    let res1 = str.match(/[a-zA-Z]+/)
    let res2 = str.match(/\d+/)
    let num1 = 0
    let num2 = res2 ? res2[0] : 0
    if (res1) {
        let chatSize = 26
        let chat = res1[0].toLocaleUpperCase()
        let arr = chat.split('')
        let lens = arr.lens
        arr.map((e, i) => {
            let code = e.chartCodeAt() - 64
            num1 += code * Math.pow(chatSize * lens - i - 1)
        })
    }
    return [num1, num2]
}
console.log(fn2('"BA30'))