当前位置: 首页 > article >正文

赛码网牛客在acm模式下利用node.js处理多行输入方法

赛码网在JS Node的语言下,acm模式的默认标准输入输出代码是这样的:

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    const tokens = line.split(' ');
    console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
});

输入:1 1
返回值:2

单行还好,如果是碰到多行就要转化一下

多行输入

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

// 初始化一个数组来存储输入的每一行数据
let lines = [];

function changeNum(arr) {
  return arr.map(item => {
    // 检查当前项是否为数组,如果是,则递归调用该函数
    if (Array.isArray(item)) {
      return changeNum(item);
    } else {
      // 将字符串转换为数字
      return Number(item);
    }
  });
}
rl.on('line', function (line) {
    // 去除每行首尾的空格,然后按空格分割每一行
    lines.push(line.trim().split(' '));
    if(lines.length===5){
        //有几行写多少,5只是针对5行输入
        lines=changeNum(lines)
        //书写自己代码的逻辑
         console.log(lines); 
}});

代码解释:
这段代码使用了Node.js的readline模块来从标准输入读取数据。下面是对代码的逐行分析:

  1. var readline = require('readline'); - 这行代码引入了Node.js的readline模块,该模块允许程序从标准输入读取数据。

  2. const rl = readline.createInterface({ ... }); - 这行代码创建了一个readline.Interface对象,它配置了readline模块以从标准输入(process.stdin)读取数据,并将输出发送到标准输出(process.stdout)。

  3. let lines = []; - 声明一个变量lines,用来存储从标准输入读取的每一行数据。

  4. function changeNum(arr) { ... } - 定义了一个名为changeNum的函数,它接受一个数组arr作为参数。这个函数的目的是将数组中的所有字符串元素转换为数字。

  5. return arr.map(item => { ... }); - 使用map函数遍历数组arr中的每个元素。对于每个元素,执行以下操作:

    • if (Array.isArray(item)) { ... } - 如果元素item是一个数组,递归调用changeNum函数以处理嵌套数组。

    • return Number(item); - 如果元素item不是数组,使用Number函数将其转换为数字。

  6. rl.on('line', function (line) { ... }); - 为readline接口添加一个事件监听器,当接收到一行输入时触发。这个事件监听器做了以下事情:

    • lines.push(line.trim().split(' ')); - 读取一行输入,去除首尾的空格,然后使用空格作为分隔符将其分割成数组,并添加到lines数组中。

    • if(lines.length===5){ ... } - 当lines数组的长度达到5时,执行以下操作:

      • lines=changeNum(lines); - 调用changeNum函数,将lines数组中的所有字符串元素转换为数字。

      • console.log(lines); - 打印转换后的lines数组。

这段代码的主要目的是从标准输入读取数据,每读取5行数据后,将这些数据中的字符串转换为数字,并打印转换后的数组。这可能是为了处理某种格式的输入数据,例如,每5行数据表示一个记录,需要将这些记录中的数字字符串转换为实际的数字类型。

输入:

1
2 3
3
4 5
5

输出:[ [ 1 ], [ 2, 3 ], [ 3 ], [ 4, 5 ], [ 5 ] ]
之后就按数组每一项计算

注意:
如果不使用changeNum转化,得到的数据是

[ [ '1' ], [ '2', '3' ], [ '3' ], [ '4', '5' ], [ '5' ] ]

http://www.kler.cn/news/290391.html

相关文章:

  • 视频结构化从入门到精通——图像算法类型介绍
  • LuaJit分析(三)luajit字节码文件格式
  • 【C++】string的模拟实现
  • 1119 Pre- and Post-order Traversals
  • Django学习(二)
  • 基因对应身体的需求 平衡饮食的重要性 第四篇
  • 8个优质视频素材库,商用无忧
  • AT+MQTT指令连接华为云实现数据上传
  • 使用linux命令导出mysql数据为CSV文件
  • 【开源风云】从若依系列脚手架汲取编程之道(三)
  • 低代码表单 FormCreate 中组件的生成规则详解
  • 机器学习和深度学习中常见损失函数,包括损失函数的数学公式、推导及其在不同场景中的应用
  • 从python应用app向微软Microsoft Teams Channel发送消息message
  • Kafka3.x 使用 KRaft 模式部署 不依赖 ZooKeeper
  • Redis数据结构与连接
  • 快速掌握GPTEngineer:用AI创建网页应用的实用教程
  • 从laborer一词掌握单词记忆的秘诀
  • 《NLP自然语言处理》—— 关键字提取之TF-IDF算法
  • 代码随想录八股训练营第三十一天| C++
  • flutter 提示框2 Dialog
  • Leetcode Hot 100刷题记录 -Day6(滑动窗口)
  • 【护网相关知识】
  • Linux【5】远程管理
  • Python数据结构类型总结
  • 力扣SQL仅数据库(175~185)
  • Linux日志-lastlog日志
  • 网络编程(学习)2024.9.3
  • 3GPP R18 Network energy savings(NES) 之cell DTX/DRX
  • 「MyBatis」图书管理系统 v1.0
  • 对同一文件夹下所有excel表进行相同操作(数据填充、删除、合并)