//程序运行完成时一定要有输出语句,本工具才能正确展示运行结果。
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'))