赛码网牛客在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.mzph.cn/web/52003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java重点学习-redis

一.redis 穿透无中生有key,布隆过滤nul隔离 锁与非期解难题。缓存击穿过期key, 雪崩大量过期key,过期时间要随机。 面试必考三兄弟,可用限流来保底。 1.1 Redis的使用场景 根据自己简历上的业务进行回答 缓存穿透、击穿、雪崩、双…

实验报告: lookie-lookie 项目测试与分析

目录 一、实验目的 二、实验环境 三、实验步骤 1. 下载与准备项目 1.1 从 GitHub 获取项目 1.2 查看项目文件结构 2. 运行项目 2.1 启动项目 2.2 浏览器设置 3. 项目体验 3.1 功能测试 3.2 运行截图 4. 文件结构分析 4.1 总体结构 4.2 主要文件和目录说明 5. 数…

重头开始嵌入式第三十二天(TCP多客户端模型)

1.多路IO 1.select #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <netine…

基于人体关节夹角的人体动作识别算法(代码+数据集)

为此本文提出了一个基于人体关节夹角的人体动作识别算法&#xff0c;主要做了以下工作&#xff1a; &#xff08;1&#xff09;提出了一个可解释性强&#xff0c;耗费算力较少且鲁棒性较高的基于人体关节夹角的人体动作序列的特征抽取方法。 &#xff08;2&#xff09;本文所使…

PCL 移动立方体三维重建——RBF算法【2024最新版】

目录 一、算法原理1、算法概述2、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接,首发于:2024年9月1日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法概述 该算法实现的是Reconstruction a…

单片机配置导入导出功能设计(一种思路)

背景&#xff1a; 为了方便部分不开放到屏幕的配置进行修改&#xff0c;兼容离线机器&#xff0c;也支持产线大批量配置导入&#xff0c;提高生产效率&#xff0c;特此研发配置导入导出功能。 原理&#xff1a; 上电监测到U盘和文件系统正常后&#xff0c;监测是否存在配置文件…

贸易术语你都不懂,你还做什么外贸

外贸小伙伴们&#xff0c;连贸易术语都不懂&#xff0c;还做啥外贸&#xff1f;别担心&#xff0c;今天我给大家整理了常见的外贸贸易术语&#xff0c;让你轻松入门&#xff0c;快速上手&#xff01; 1、FOB: Free On Board 船上交货价。按离岸价进行的交易&#xff0c;买方…

Java并发线程 共享模型之管程 5

1. 生产者消费者 package cn.itcast.testcopy;import cn.itcast.n2copy.util.Sleeper; import lombok.extern.slf4j.Slf4j;import java.util.LinkedList;/*** ClassName: Test21* Package: cn.itcast.testcopy* Description: 生产者消费者** Author: 1043* Create: 2024/9/4 - …

软件测试之压力测试知识总结

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 压力测试 压力测试是一种软件测试&#xff0c;用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…

Vue 3 的性能提升具体体现在哪些方面?

Vue 3 的性能提升体现在多个方面&#xff0c;以下是一些具体的例子&#xff1a; 基于 Proxy 的响应式系统&#xff1a; Vue 2 使用 Object.defineProperty 来实现响应式数据绑定&#xff0c;这种方式在处理数组或添加新的属性时存在局限性。Vue 3 引入了基于 Proxy 的响应式系统…

Android 获取通话记录

在某些App的开发者&#xff0c;获取通话记录有时候是必要的&#xff08;现在都要申请相对于权限哦&#xff0c;App上架得说明为啥获取此权限&#xff09;。 因为工作风控数据收集经常会用到&#xff0c;在此做个总结。 大致步骤 1.权限声明 2.申请权限 3.获取通话记录 4.…

LNMP环境搭建(Linux+nginx+Mysql+PHP)超详细攻略

目录 一.LNMP简介 1.1LNMP架构的特点 二.详细安装步骤 2.1MySQL安装 2.1-1Yum安装 2.1-2 编译安装 2.1-3二进制安装 2.1-4 RPM安装 2.2Nginx安装 2.2-1编译安装nginx 2.2-2yum安装nginx 2.3验证Nginx安装 2.4PHP安装 2.4-1编译安装PHP 2.4-2yum安装PHP 2.5 Nginx 配…

PMP–一、二、三模、冲刺、必刷–分类–14.敏捷–技巧--累积流图

文章目录 技巧一模二模三模14.敏捷–敏捷团队的衡量结果–累积流图&#xff1a;1、 敏捷项目的项目经理担心团队在最近的迭代中失去了动力。项目经理应该使用哪两种工具来分析团队绩效&#xff1f;&#xff08;选择两个&#xff09; 冲刺必刷7.成本管理--挣值分析燃尽图仅能了解…

Android --- observer和observerForever的区别

observe 和 observeForever 是 LiveData 中的两个方法&#xff0c;用于观察数据的变化&#xff0c;但它们在生命周期管理和适用场景上有区别&#xff1a; ---->observe: 用途: 注册一个观察者&#xff0c;该观察者在 LifecycleOwner&#xff08;如 Activity 或 Fragment&am…

From Man vs Machine to Man + Machine

From Man vs. Machine to Man Machine: The Art and AI of Stock Analyses 论文阅读 文章目录 From Man vs. Machine to Man Machine: The Art and AI of Stock Analyses 论文阅读 AbstractConstruction and Performance of the AI AnalystMethodologyThe Performance of Ana…

一款用于分析java socket连接问题的工具

network-tools 介绍 network-tools基于sun jdk、Oracle jdk开发&#xff0c;拦截基于java socket请求&#xff0c;它包括 ​ http 客户端 ​ jdbc 客户端 ​ mq 客户端 ​ redis 客户端 目前提供如下功能&#xff1a; ​ 最近端点连接情况 ​ 最近与远程端点连接情况&am…

【Windows】【C++】【Udp】 udp通信协议详解和示例

在 Windows 平台上&#xff0c;使用 C 实现的 UDP 通信服务器和客户端示例代码稍有不同&#xff0c;因为 Windows 使用 Winsock API 进行网络编程。下面是一个简单的 UDP 服务器和客户端的实现示例&#xff0c;包括详细的代码和说明。 UDP 服务器代码示例&#xff08;Windows&…

Mybatis分页查询主从表

先主查询&#xff0c;再关联子查询&#xff0c;不影响分页效果&#xff0c;否则子查询也会参与分页。 <resultMap id"Hdr" type"com.Hdr"><id column"crh_id" property"id" javaType"int"/><collection prop…

计算机网络 第1章 概述

文章目录 计算机网络概念计算机网络的组成计算机网络的功能三种数据交换技术电路交换&#xff08;Circuit Switching&#xff09;报文交换&#xff08;message&#xff09;分组交换 三种交换方式性能对比计算机网络的分类计算机网络的性能指标性能指标1&#xff1a;速率性能指标…