使用javascript做在线算法编程


Posted in Javascript onMay 25, 2018

基于node的readline一样可以使用标准流的输入输出

对于大学生在刚开始学习c ,c++, java的时候,写着hello word的代码,然后在命令框中输入输出;

基于很多算法的学习,在我短浅的认识中,身边的同学都是使用 c, c++,甚至是java去写;

很多算法题目中的输入描述和输出描述

例如牛客网上的算法题:

使用javascript做在线算法编程 

类似于这种的东西,在杭州acm的算法题目也是。

诀窍------使用nodejs内置封装好的readline模块;[kbd][/kbd]

1.readline 模块 【逐行读取】

readline主要的功能是提供了一个可以从可读流中读取数据;

这里可以对nodejs的可读流和可写流进行深入研究

2.如何使用readline?

一个基本的例子:

// 引入readline模块
const readline = require('readline');
//创建readline接口实例
const option ={
input:process.stdin,
output:process.stdout,
prompt:'>>'
}
const rl = readline.createInterface(option);
rl.question('你觉得js的这个模块怎么样?', (answer) => {
// 对答案进行处理
// 注意:log中的要使用 `` 而不是 '';
console.log(`你觉得:${answer}`);
// 关闭标准流
rl.close();
});

详情可以点击我的github的 readline_dome.js

3.进一步扩展去应用

3.1例如做一个简单的命令行界面;

// 来自官方例子实现的命令界面;
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: 'input> '
});
// rl.prompt() 方法会在 output 流中新的一行写入 readline.Interface 实例配置后的 prompt,用于为用户提供一个可供输入的新的位置。
rl.prompt();
// 'line'事件是 获取用户输入的值直到按下【return / enter】 按键;\n、\r 或 \r\n
rl.on('line', (line) => {
// ob.trim()==>从字符串中移除前导空格、尾随空格和行终止符。
switch (line.trim()) {
case 'hello':
console.log('world!');
break;
default:
console.log(`你输入的是:'${line.trim()}'`);
break;
}
rl.prompt();
}).on('close', () => {
console.log('再见!');
//推出标准流;
process.exit(0);
});

3.2类似于牛客网编程的例子;

这是一个单行读取的demo

const readline = require('readline');
const fs = require('fs')
// 单行读取;
const options={
input:process.stdin,
output:process.stdout
}
const rl = readline.createInterface(options);
// 单行读取;
rl.on('line',function(line){
line.trim();
console.log(`你输入的值(移除前导空格、尾随空格和行终止符):${line.trim()}`)
})

这是一个多行读取的demo

const readline = require('readline');
const fs = require('fs')
// 多行读取;
const options={
input:process.stdin,
output:process.stdout
}
const rl = readline.createInterface(options);
// 多行读取
// 多行处理的思路是:1.需要设定未开始读取的行数标志,并且如果开始读取的第一行是n行的行数;
//        2.需要通过判断是否已经到了设定的行数,若到了则只需在里面处理相关的算法逻辑;
var n = -1;
var sum = (a,b)=>a+b;
var arr =[];
rl.on('line',function(line){
// 表示已经在读取第一行的n行数;
if(n == -1){
// 类型转换和去除首位空格和终止符;并把行数赋值给n;
n = parseInt(line.trim());
console.log('n:'+n)
}
else{
// 存入数组;
arr.push(line.trim());
if(n == arr.length){
// 这里是执行你要的代码;
//  var result = arr[1];
var result = sum(arr[0],arr[1]);
console.log("result:"+result)
//恢复没读取状态;
arr.length=0;
n=-1;
}
}
})

总结

以上所述是小编给大家介绍的使用javascript做在线算法编程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js下弹出窗口的变通
Apr 18 Javascript
JavaScript 语言的递归编程
May 18 Javascript
基于prototype扩展的JavaScript常用函数库
Nov 30 Javascript
Angularjs 基础入门
Dec 26 Javascript
JS中字符串trim()使用示例
May 26 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
Apr 29 Javascript
简单实现js间歇或无缝滚动效果
Jun 29 Javascript
Angular浏览器插件Batarang介绍及使用
Feb 07 Javascript
vue源码中的检测方法的实现
Sep 26 Javascript
JS实现网站楼层导航效果代码实例
Jun 16 Javascript
Vue使用screenfull实现全屏效果
Sep 17 Javascript
JS实现的汉字与Unicode码相互转化功能分析
May 25 #Javascript
浅析node.js的模块加载机制
May 25 #Javascript
webpack4的迁移的使用方法
May 25 #Javascript
最后说说Vue2 SSR 的 Cookies 问题
May 25 #Javascript
详解webpack4多入口、多页面项目构建案例
May 25 #Javascript
js中的 || 与 && 运算符详解
May 24 #Javascript
vue axios整合使用全攻略
May 24 #Javascript
You might like
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
vue+animation实现翻页动画
2020/06/29 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
Python解析nginx日志文件
2015/05/11 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
Python实现爬取并分析电商评论
2020/06/19 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
荟萃全球保健品:维他购
2018/05/09 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
先进个人自荐书
2015/03/06 职场文书
公司的力量观后感
2015/06/05 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python