好用的原创 JavaScript 算法题输入流读取代码模板

用 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}, () => )
本文收录于专栏
整理一些开发相关的好用软件、网站、工具等
记录 JavaScript 刷题时用到的一些语法、代码片段、工具、经验等