美文网首页技术干货程序员Web前端之路
使用javascript一样可以做在线算法编程

使用javascript一样可以做在线算法编程

作者: Cc卿 | 来源:发表于2018-05-25 11:27 被阅读92次

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

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

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

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

    例如牛客网上的算法题:

    类似于这种的东西,在杭州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使用算法编程,不太懂得js的输入输出流,

    做起来在这上面花了不少时间 - -!

    原文:http://wusiqing.com/?p=204

    [nodejs] http://nodejs.cn/api/readline.html nodejs

    [console.log]https://segmentfault.com/a/1190000012957199#articleHeader0console.log

    [ob.trim()] https://msdn.microsoft.com/library/ff679971(v=vs.94).aspx

    相关文章

      网友评论

      本文标题:使用javascript一样可以做在线算法编程

      本文链接:https://www.haomeiwen.com/subject/ofmyjftx.html