本题将会给出
条报错信息,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每条报错信息描述如下:
在一行上先输入一个长度为
的字符串
代表文件路径;随后,在同一行输入一个整数
代表行号。
文件路径的格式如题干所述,保证文件名不为空。
至多八行,每行先输出一个长度为
的字符串
,代表文件名;随后,在同一行输出错误行号、报错次数。
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]]);
}
}