描述
在本题中,我们需要处理文件报错信息,其由出错文件的文件路径和错误行号组成。
文件路径的前三个字母为大写字母 A-Z 、冒号 ":" 和反斜杠 ,代表盘符;随后是若干由小写字母构成的字符串,代表文件夹名,彼此使用单个反斜杠间隔。路径的最后一个反斜杠后是文件名。
我们只在乎文件名(即去掉除了文件名以外的全部信息),且至多保留文件名的最后 16 个字符。
随后,我们需要统计相同的报错信息:
∙如果两条报错信息保留后 16 个字符后的文件名相同,且行号相同,则视为同一个报错;
相同的报错信息以第一次出现的时间为准,至多输出最后 8 条记录。
输入描述:
本题将会给出 1≦T≦100 条报错信息,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每条报错信息描述如下:
在一行上先输入一个长度为 1≦length(x)≦100 的字符串 x 代表文件路径;随后,在同一行输入一个整数 y(1≦y≦1000) 代表行号。
文件路径的格式如题干所述,保证文件名不为空。
输出描述:
至多八行,每行先输出一个长度为 1≦length(s)≦16 的字符串 s ,代表文件名;随后,在同一行输出错误行号、报错次数。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
let arr = [];
let save = {};
let index = 0;
let left = 0,
right = 0;
while ((line = await readline())) {
let name, num;
[name, num] = line.split(" ");
name = name.split("\\");
name = name[name.length - 1];
if (name.length > 16) {
name = name.slice(name.length - 16);
}
name = name + " " + num;
// 名字后16字符+行号作为key
if (!save[name]) {
// 库里没有
save[name] = { index: index, time: 1 };
index++;
right++;
if (right - left > 8) {
left++;
}
} else {
if (save[name].index >= left) {
save[name].time++;
}
}
}
for (let i in save) {
if (save[i].index >= left && save[i].index <= right) {
console.log(i + " " + save[i].time);
}
}
})();