资讯专栏INFORMATION COLUMN

用node.js做编程题

Zoom / 1826人阅读

摘要:用写编程题的核心在的接口,读取输入行,模块提供了一个接口,用于从可读流如读取数据,每次读取一行。五总结通过以上这种方式,应该能完成大部分的在线编程题,有需要的童鞋可以试试看。

一.js的控制台输入
做各大公司的在线编程题,一般都有输入输出,传统的js不能完成读取输入的功能,这时候为了继续用js写编程题,只能借助node.js来进行在线笔试的输入输出,下面具体来说说这个问题。

用node.js写编程题的核心在node的readline接口,读取输入行,

require("readline") 模块提供了一个接口,用于从可读流(如 process.stdin)读取数据,每次读取一行。 它可以通过以下方式使用:

const readline = require("readline");

基本用法如下:

const readline = require("readline");//在这里引入

const rl = readline.createInterface({ //创建输入输出接口
  input: process.stdin,
  output: process.stdout
});

rl.on("line",function(line){//监听控制台的输入
 var data=line.trim();//拿到控制台输入
 var result=....//编程逻辑处理

console.log(result); //输出结果
});

通过这样一个过程,拿到输入->逻辑处理->输出结果,完成在线笔试。

但是实际中会碰到一个棘手的问题,就是有的题目,输入不止一行,会有2行甚至N行的输入,那么像上面这种写法,data只能拿到第一次单行的输入,不能够拿到多行输入,所以不能解决问题,那么接下来通过两个简单小例子介绍如何进行接收控制台多行输入。

二.两行输入的在线编程

题目:输入两行,第一行是字符串s1,第二行是字符串s2,输出两个字符串连接后的结果。
例子:

输入  "hello"
      "world"
      
输出  "helloworld"  
 

代码如下:

const readline = require("readline");

const rl = readline.createInterface({ 
  input: process.stdin,
  output: process.stdout
});

var k=2;//这里代表题目中设定好的输入的行数
var rows=[]; //用于存储每行的输入

rl.on("line",function(line){
 rows.push(line);//将每次输入的行数据存入
 if(k==rows.length){//当输入的行数等于设定的k值时,开始逻辑处理
 
   var result=rows[0]+rows[1]; //连接字符串
   console.log(result); //输出结果
   
   rows.length=0;//状态重置
 }

});

三.N行输入的在线编程

题目:输入数字N(1例子:

输入:4
     "nice"
     "to"
     "meet"
     "you"
     
输出:"nicetomeetyou"  

代码如下:

const readline = require("readline");

const rl = readline.createInterface({ 
  input: process.stdin,
  output: process.stdout
});

var k=-1;//先给行数置-1,表示还没开始读取
var rows=[]; //用于存储每行的输入

rl.on("line",function(line){
 if(k<0){
   k=parseInt(line.trim());//读取第一行,得到接下来输入的行数
 }else{
   rows.push(line.trim());//将每次输入的行数据存入
    if(k==rows.length){//当输入的行数等于设定的k值时,开始逻辑处理
 
     var result=rows.reduce(function(fir,cur){ //连接字符串
     return fir+cur;
   });
     console.log(result); //输出结果
   
     rows.length=0;//状态重置
     k=-1;
   }
 }
});
   

四.通用性的方式:按照数据流输入的方式

在做笔试时碰到过例题的输入方式,不是按行读入的,是一次性读入,然后按照“ ”进行行分隔,下面上个具体例子的代码,供大家参考,有兴趣的可以学习下。

process.stdin.resume();
process.stdin.setEncoding("ascii");

var input = "";
var input_array = "";

process.stdin.on("data", function (data) {
    input += data;
});

process.stdin.on("end", function () {
    input_array = input.split("
");
    var nLine = 0;

    while(nLine < input_array.length){
        var line = input_array[nLine++].trim();
        if(line === ""){
            continue;
        }
        var input_arrays = line.split(" ");
        var a = +input_arrays[0];
        var b = +input_arrays[1];
        console.log(a+b);
    }
});

五.总结
通过以上这种方式,应该能完成大部分的在线编程题,有需要的童鞋可以试试看。祝大家笔试顺利,找到一份满意的工作!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87308.html

相关文章

  • 前端面试(3)现代技术

    摘要:什么是单页面应用单页面应用是指用户在浏览器加载单一的页面,后续请求都无需再离开此页目标旨在用为用户提供了更接近本地移动或桌面应用程序的体验。流程第一次请求时,将导航页传输到客户端,其余请求通过获取数据实现数据的传输通过或远程过程调用。 什么是单页面应用(SPA)? 单页面应用(SPA)是指用户在浏览器加载单一的HTML页面,后续请求都无需再离开此页 目标:旨在用为用户提供了更接近本地...

    EasonTyler 评论0 收藏0
  • 前端面试(3)现代技术

    摘要:什么是单页面应用单页面应用是指用户在浏览器加载单一的页面,后续请求都无需再离开此页目标旨在用为用户提供了更接近本地移动或桌面应用程序的体验。流程第一次请求时,将导航页传输到客户端,其余请求通过获取数据实现数据的传输通过或远程过程调用。 什么是单页面应用(SPA)? 单页面应用(SPA)是指用户在浏览器加载单一的HTML页面,后续请求都无需再离开此页 目标:旨在用为用户提供了更接近本地...

    trigkit4 评论0 收藏0
  • 前端资源系列(4)-前端学习资源分享&前端面试资源汇总

    摘要:特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 本以为自己收藏的站点多,可以很快搞定,没想到一入汇总深似海。还有很多不足&遗漏的地方,欢迎补充。有错误的地方,还请斧正... 托管: welcome to git,欢迎交流,感谢star 有好友反应和斧正,会及时更新,平时业务工作时也会不定期更...

    princekin 评论0 收藏0
  • 深入理解js

    摘要:详解十大常用设计模式力荐深度好文深入理解大设计模式收集各种疑难杂症的问题集锦关于,工作和学习过程中遇到过许多问题,也解答过许多别人的问题。介绍了的内存管理。 延迟加载 (Lazyload) 三种实现方式 延迟加载也称为惰性加载,即在长网页中延迟加载图像。用户滚动到它们之前,视口外的图像不会加载。本文详细介绍了三种延迟加载的实现方式。 详解 Javascript十大常用设计模式 力荐~ ...

    caikeal 评论0 收藏0

发表评论

0条评论

Zoom

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<