本题将会给出
条报错信息,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每条报错信息描述如下:
在一行上先输入一个长度为
的字符串
代表文件路径;随后,在同一行输入一个整数
代表行号。
文件路径的格式如题干所述,保证文件名不为空。
至多八行,每行先输出一个长度为
的字符串
,代表文件名;随后,在同一行输出错误行号、报错次数。
D:\oblemsinnowcoder 12 D:\nowcoderproblemsinnowcoder 12 D:\nowcoder\problemsinnowcoder 13 D:\oj\problemsinnowcoder 13
oblemsinnowcoder 12 2 oblemsinnowcoder 13 2
在这个样例中,这四条报错信息去除文件路径后,由于文件名长度均超过
个字符,故我们只保留最后
个字符,得到的文件名均为
。所以,我们将它们看作同一个文件,按照报错行号划分即可。
A:\aa 1 B:\b 1 C:\c 1 D:\d 1 E:\e 1 F:\f 1 G:\g 1 H:\h 1 I:\i 1 A:\aa 1
b 1 1 c 1 1 d 1 1 e 1 1 f 1 1 g 1 1 h 1 1 i 1 1
在这个样例中,第一、十条报错信息完全相同,但是我们以其第一次出现的顺序为准,在输出最后
条记录时,不包含这一报错。
D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645 E:\je\rzuwnjvnuz 633 C:\km\tgjwpb\gy\atl 637 F:\weioj\hadd\connsh\rwyfvzsopsuiqjnr 647 E:\ns\mfwj\wqkoki\eez 648 D:\cfmwafhhgeyawnool 649 E:\czt\opwip\osnll\c 637 G:\nt\f 633 F:\fop\ywzqaop 631 F:\yay\jc\ywzqaop 631 D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645
rzuwnjvnuz 633 1 atl 637 1 rwyfvzsopsuiqjnr 647 1 eez 648 1 fmwafhhgeyawnool 649 1 c 637 1 f 633 1 ywzqaop 631 2
const rl = require("readline").createInterface({ input: process.stdin });
const lines = [];
rl.on("line", (res) => {
lines.push(res);
});
// 首先我需要有个排序索引,索引可以设置为第一次出现的行号(指在数据行index)
// 其次我需要一个map存储历史报错信息,key设置为文件名,对象内容中有个key是行号, 对应每行出现的异常次数
rl.on("close", () => {
const nameMap = {};
const lineErrMap = {};
for (let i = 0; i < lines.length; i++) {
const [file, lineNum] = lines[i].split(" ");
let fileName = file.split("\\").pop();
fileName = fileName.substring(fileName.length - 16, fileName.length);
if (nameMap[fileName]) { // 历史出现过相同名字的错误
let target = nameMap[fileName][lineNum];
if (target) {
// 同一个文件某一行报错出现过
nameMap[fileName][lineNum].sum = nameMap[fileName][lineNum].sum + 1;
const first = nameMap[fileName][lineNum].index;
lineErrMap[first].count = lineErrMap[first].count + 1;
} else {
// 同一个文件某一行报错未出现过
nameMap[fileName][lineNum] = {
sum: 1,
index: i,
}
lineErrMap[i] = {
fileName,
lineNum,
count: 1
}
}
} else { // 历史未出现过相同名称的错误, 直接push
nameMap[fileName] = {
[lineNum]: {
sum: 1,
index: i,
}
}
lineErrMap[i] = {
fileName,
lineNum,
count: 1
}
}
}
let keys = Object.keys(lineErrMap);
let start = keys.length > 8 ? keys.length - 8 : 0;
for(let i=start; i<keys.length; i++) {
const lineItem = lineErrMap[keys[i]];
console.log(`${lineItem.fileName} ${lineItem.lineNum} ${lineItem.count}`);
}
});
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Get standard filename from filepath
function parseFilename(path) {
const reg = /([C-Z]:\\)?([a-zA-Z]+\\)*([a-zA-Z]+)/;
let filenameArr = path.match(reg);
if (!filenameArr) return null;
let filename = filenameArr[filenameArr.length - 1];
if (filename.length > 16) {
return filename.slice(filename.length - 16);
}
return filename;
}
// Return true if both filename and line number are same
function isDuplicatedRecord(map, arr) {
let flag = 0;
map.forEach((value, key, map) => {
if (Array.isArray(key) && arr[0] === key[0] && arr[1] === key[1]) {
map.set(key, ++value);
flag++;
}
});
if (flag > 0) return true;
return false;
}
// Get input stream [n][2]
let inputData = [];
let i = 0;
while ((line = await readline())) {
let tokens = line.split(" ");
inputData[i] = tokens;
i++;
}
// Sorted input data
inputData.map((i) => {
i[0] = parseFilename(i[0]);
});
let records = new Map();
let trash = new Map();
inputData.forEach((item) => {
// Is the same record?
// Just add count if true
// Add it into map if false
if (
!isDuplicatedRecord(records, item) &&
!isDuplicatedRecord(trash, item)
) {
if (records.size === 8) {
// Move the oldest record into trash
let firstKey = records.keys().next().value;
trash.set(firstKey, records.get(firstKey));
records.delete(firstKey);
}
// Set new record
records.set(item, 1);
}
});
records.forEach((value, key) => console.log(`${key[0]} ${key[1]} ${value}`));
})();
/*
+--------------------+
|E:\je\rzuwnjvnuz 633|
+------+ split(" ") +--------+
| +--------------------+ |
+---------v---------+ +---v---+
| [0] | | [1] |
| path | | row |
| | | |
| E:\je\rzuwnj^nuz | | 633 |
+---------+---------+ +----+--+
| |
+-------v-------+ |
| split("\\") | |
+-------+-------+ | +-----------+
| +------------------------+ | False |
+------------v-------------+ |--------------+ |string| | |
| path segment | +-------> ||isRecoderSame+--------------> add {} |
| + | | |--------------+ | row | | count ++ |
| | | | +-----------------+------+ +-----------+
| | | | |
| v | | | True
+------------+-------------+ | |
| path segment[length-1] | | v
| | | +--------+---------+
| rzuwnjvnuz | | | |
| | | | count ++ |
+------------+-------------+ | | |
| | +------------------+
+-------v--------+ |
| substr(-1,16) | |
+----------------+ |
|
rzuwnjvnuz +---------------+
*/
const readline = require('readline');
let map = new Map()
// 哈希表是无序的
let count =1
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (line) {
let pathes = line.split(" ")
let row = +pathes[1]
let path = pathes[0]
let recoderName = path.substr((path.lastIndexOf("\\"))+1).substr(-16)
isRecoderSame(recoderName+" "+row,row)
});
rl.on("close",function(line){
let recoder = Array.from(map.keys())
let count = Array.from(map.values())
//console.log(recoder,count)
if(recoder.length<=8){
for(let i = 0;i<recoder.length;i++){
console.log(recoder[i]+" "+count[i])
}
}else{
for(let i = recoder.length-8;i<recoder.length;i++){
console.log(recoder[i]+" "+count[i])
}
}
})
function isRecoderSame(recoder,row){
if(map.has(recoder)){
map.set(recoder,map.get(recoder)+1)
}else{
map.set(recoder,count)
}
} let arr = [],arr2 = [];
let s = '';
let obj = {};
while(line = readline()){
arr.push(line);
}
arr = arr.reverse();
for(let i=0; i < arr.length ; i++){
let a = arr[i].split(' ')[0].split('\\').pop();
let b = arr[i].split(' ')[1];
if(a.length > 16){
a = a.slice(a.length-16);
}
s = a + ' ' + b;
if(!obj[s]){
obj[s] = 1
}else{
let num = obj[s];
delete obj[s];
obj[s] = num+1;
}
}
for(let key in obj){
arr2.push(key+' '+ obj[key]);
}
arr2 = arr2.slice(0,8).reverse();
arr2.forEach(item => console.log(item)); let res = [];
let str;
while(str = readline()) {
const item = str.split(' ');
let fileName = item[0].split('\\').slice(-1)[0].slice(-16);
const line = +item[1];
let has = false;
res.forEach(d => {
if(d.fileName === fileName && d.line === line) {
d.count++;
has = true;
}
})
if(!has) {
res.push({fileName, line, count: 1});
}
}
const ans = res.slice(-8);
for(let i=0; i<ans.length;i++) {
const d = ans[i];
console.log(`${d.fileName} ${d.line} ${d.count}`)
} var resultAr = new Map();
var res = new Array();
while (line = readline()){
name = line.slice(line.lastIndexOf("\\")+1)
if(resultAr.has(name)){
let count= resultAr.get(name)+1
resultAr.set(name,count)
}else{
resultAr.set(name,1)
}
}
resultAr.forEach((value,key)=>{
if(key.split(' ')[0].length>16){
key=key.split(' ')[0].slice(key.split(' ')[0].length-16)+' '+key.split(' ')[1]
}
res.push(key+' '+value)
if(res.length>8){
res.shift()
}
})
res.forEach((item)=>{
console.log(item)
})
题目认真读完两遍思路就很清晰了,这题不难吧
var ar=[];
while(line = readline()){
var addArr = line.split();
var arr = line.split("\\");
var str = arr[arr.length-1];
ar.push(str);
}
var qw=[];
for(var i = 0;i<ar.length;i++){
var num=0;
for(var k = 0;k<ar.length;k++){
if(ar[i]=== ar[k]){
num++;
}
}
qw.push(ar[i]+" "+num);
}
qw = [...new Set(qw)];
for(var k = 0;k<qw.length;k++){
if(qw[k].split(" ")[0].length>16){
var str = qw[k].split(" ")[0];
str = str.substr(str.length-16,str.length);
qw[k]= str + " "+qw[k].split(" ")[1]+ " "+qw[k].split(" ")[2];
}
}
if(qw.length>8){
for(var j = qw.length-8;j<qw.length;j++){
console.log(qw[j]);
}
}else{
for(var j = 0;j<qw.length;j++){
console.log(qw[j]);
}
}
var list = [];
var line;
while ((line = readline())) {
var arr = line.split(" ");
var lineNo = arr[arr.length - 1];
let nameArr = arr[0].split("\\");
let path = nameArr[nameArr.length - 1].slice(-16);
let index = list.findIndex(v => v.path == path && v.lineNo == lineNo);
if (index != -1) {
list[index].count += 1;
} else {
list.push({ path, lineNo, count: 1 });
}
}
var outList = list.slice(-8);
for (var i = 0; i < outList.length; i++) {
console.log(
outList[i].path + " " + outList[i].lineNo + " " + outList[i].count
);
} var readline = require('readline');
var errors={};
var files = [];
var path = require('path');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function(line){
record(line);
}).on('close', function() {
output();
});
function record(str) {
errs = str.split(' ');
filename = path.win32.basename(errs[0]);
filename = filename.slice(-16,filename.length) + " " + errs[1];
if (errors[filename]) {
errors[filename]++;
} else {
errors[filename] = 1;
}
if (files.indexOf(filename) === -1) {
files.push(filename);
}
}
function output() {
files = files.slice(-8, files.length);
for (var i=0; i< files.length; i++) {
console.log(files[i],errors[files[i]]);
}
} 这道题的坑在于循环记录不能顶掉前面的记录,而是只输出最后8条记录。题意不明!
var readline = require('readline');
var errors={};
var files = [];
var path = require('path');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function(line){
record(line);
}).on('close', function() {
output();
});
function record(str) {
errs = str.split(' ');
filename = path.win32.basename(errs[0]);
filename = filename.slice(-16,filename.length) + " " + errs[1];
if (errors[filename]) {
errors[filename]++;
} else {
errors[filename] = 1;
}
if (files.indexOf(filename) === -1) {
files.push(filename);
}
}
function output() {
files = files.slice(-8, files.length);
for (var i=0; i< files.length; i++) {
console.log(files[i],errors[files[i]]);
}
}