用 JavaScript 去写需要自行获取输入的算法平台时,除了处理输入稍微繁琐,总体来说没有什么问题。对于获取输入流,我整理了一个代码模板框架,个人感觉还是比较好用的,可以做到像其他语言一样按行读取。
可借助编辑器的快捷输入,去使用这套模板框架,比如:
- IDEA: Live Template
- VSCode: User snippets (File->Preferences->User snippets)
- 可通过 codemirror 的 autocomplete ,封装一个自己的 Web IDE
abuf 基础框架模板
包括:
- 读取所有输入流放到字符串
- 入口函数 run 方法,传参输入流字符串,方便本地调试时传入题目用例
- 将输入流字符串拆分,提供按行读取的方法 readline
let bs = ''
process.stdin.on('data', d => bs += d)
process.stdin.on('end', () => run(bs))
function run(bs) {
let buf = bs.trim().split('\n'), bp = 0
let readline = () => buf[bp++]
let [n] = readline().split(' ').map(x => +x)
}
areadline 读取一行并拆分
继续读取下一行,并按空格拆分:
let line = readline().split(' ').map(x => +x)
应用场景:
- 可嵌套在 for 中使用,比如接下来读n行,遍历n次,每次使用这个 areadline 读取。
- 可直接使用 line 数组;或者使用解构赋值设置变量。
aarr 创建指定长度的数组
算法题往往需要创建指定长度的数组。
备注:不要将以下代码封装为函数,而是直接使用。封装为函数的话,创建多层数组,会遭到优化,导致每一个二级数组都指向同一个地址。
Array.from({length: n}, () => )