首页 > 试题广场 >

简单错误记录

[编程题]简单错误记录
  • 热度指数:339061 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。


处理:


1、 记录最多8条错误记录,循环记录,最后只用输出最后出现的八条错误记录。对相同的错误记录只记录一条,但是错误计数增加。最后一个斜杠后面的带后缀名的部分(保留最后16位)和行号完全匹配的记录才做算是相同的错误记录。
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。也就是说,哪怕不同路径下的文件,如果它们的名字的后16个字符相同,也被视为相同的错误记录
4、循环记录时,只以第一次出现的顺序为准,后面重复的不会更新它的出现时间,仍以第一次为准

数据范围:错误记录数量满足 ,每条记录长度满足

输入描述:

每组只包含一个测试用例。一个测试用例包含一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。



输出描述:

将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:

示例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

说明

由于D:\cfmwafhhgeyawnool 649的文件名长度超过了16个字符,达到了17,所以第一个字符'c'应该被忽略。
记录F:\fop\ywzqaop 631和F:\yay\jc\ywzqaop 631由于文件名和行号相同,因此被视为同一个错误记录,哪怕它们的路径是不同的。
由于循环记录时,只以第一次出现的顺序为准,后面重复的不会更新它的出现时间,仍以第一次为准,所以D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645不会被记录。  
import sys
def returnsls(strs: str):
    tls = strs.split(" ")  # 拆分一行输入为列表,两个元素
    tstrs = tls[0].split("\\")
    if len(tstrs[-1]) <= 16:
        tls[0] = tstrs[-1]
    else:
        tls[0] = tstrs[-1][len(tstrs[-1]) - 16 :]
    tls.append("1")
    return tls
als = []  # 最终统计完成的列表
try:
    while True:
        ifappend = True
        strs = input()
        if not strs:
            break
        sls = returnsls(strs)
        if len(als) == 0:  # 总表为空时,直接append第一个输入
            als.append(sls)
        elif len(als) != 0:  # 总表不为空时,需要进行判断
            for i in als:  # 对于总表的每一个列表元素循环判断
                if (
                    i[0] == sls[0] and i[1] == sls[1]
                ):  # 当记录相同时,conut+1,append标签置为false!!,退出循环
                    i[2] = str(int(i[2]) + 1)
                    ifappend = False
                    break
            if ifappend:
                als.append(sls)
except:
    pass
if len(als) <= 8:
    for i in als:
        print(f"{i[0]} {i[1]} {i[2]}")
else:
    for i in range(len(als) - 8, len(als)):
        print(f"{als[i][0]} {als[i][1]} {als[i][2]}")
编辑于 2024-04-04 01:20:31 回复(0)
import sys
l1=[]
for line in sys.stdin:
    a = line.split()
    a[0]=a[0].split('\\')[-1][-16:]
    l1.append(a[0]+' '+a[1])
l2=[]
for i in l1:
    if [i,l1.count(i)] not in l2:
        l2.append([i,l1.count(i)])
l2=[x+' '+str(y) for x,y in l2[-8:]]
for i in l2:
    print(i)

发表于 2024-03-27 14:18:37 回复(0)
addreslist = []
while True:
    try:
        addreslist.append(input())
    except:
        break
outputlist = []
errorunique = {}
for error in addreslist:
    address = error.split()[0].split('\\')[-1][-16:]
    row = error.split()[1]
    if (address,row) in errorunique:
        errorunique[(address,row)] += 1
    else:
        errorunique[(address,row)] = 1
        outputlist.append((address,row))
for output in outputlist[-8:]:
    for item in output:
        print(item,end=' ')
    print(errorunique[output])

发表于 2023-09-25 17:15:41 回复(0)
import sys

li = []
for line in sys.stdin:
    a,b = line.strip('\n').split(' ')
    fn = a.split('\\')[-1]
    if len(fn) > 16:
        fn = fn[-16:]
    if len(li) == 0:
        li.append([fn,b,1])
    else:
        flag = 0
        for item in li:
            if item[0] == fn and item[1] == b:
                item[2] += 1
                flag = 1
                break
        if flag == 0:
            li.append([fn,b,1])

if len(li) >= 8:
    for item in li[-8:]:
        print(' '.join(map(str,item)))
else:
    for item in li:
        print(' '.join(map(str,item)))

发表于 2023-07-15 18:37:15 回复(0)
import sys

list1 = []
dict1 = {}
for line in sys.stdin:
    error_all = line.strip().split(" ")
    error_file = error_all[0].split('\\')[-1]
    if len(error_file) > 16:
        length =len(error_file)
        error_file = error_file[length-16:]
    error_num = error_all[1]
    error_type = error_file + ' '+ error_num
    if list1.count(error_type) != 0:
        a = list1.index(error_type)
        dict1[a] += 1
    else:
        list1.append(error_type)
        num = len(list1) - 1
        dict1[num] = 1

if len(list1) <= 8:
    i = 0
    while i < len(list1):
        print(list1[i],dict1[i])
        i += 1
else:
    i = len(list1) - 8
    while i < len(list1):
        print(list1[i],dict1[i])
        i += 1
       
发表于 2023-07-08 14:04:31 回复(0)
dic = dict()
while True:
    try:
        s = input().split('\\')[-1].split()
        log = s[0][-16:] + ' ' + s[1]
        dic[log] = dic.get(log, 0) + 1
    except:
        break

for key,val in list(dic.items())[-8:]:
    print(key, val)

发表于 2023-05-02 18:23:03 回复(3)
import sys

bugs=dict()

for order, line in enumerate(sys.stdin):
    key = line.strip('\n').split('\\')[-1]
    name = key.split(' ')
    if len(name[0]) > 16: key = name[0][-16:] + ' ' + name[1]
    if bugs.__contains__(key):
        bugs[key][0] += 1
    else:
        bugs[key] = [1,order]


for i in list(bugs.items())[-8:]:
    print(i[0] + ' ' + str(i[1][0]))

发表于 2023-04-13 17:59:40 回复(0)
import sys, collections

datas = sys.stdin.read().strip().split("\n")

lines_count = collections.defaultdict(int)
for data in datas:
    path, line = data.split(" ")
    path = path.split("\\")[-1][-16:]
    lines_count[f"{path} {line}"] += 1

for k,v in list(lines_count.items())[-8:]:
    print(f"{k} {v}")


发表于 2023-03-27 22:59:24 回复(0)
import sys
dic = {}
name_list = []
delete_item = []
for line in sys.stdin:
    a = line.split()
    a[0] = a[0].split('\\')[-1]
    if len(a[0]) > 16:
        a[0] = a[0][-16:]

    while len(dic) >= 8:
        if a[0]+' '+a[1] not in delete_item and a[0]+' '+a[1] not in dic:
            delete_item.append(name_list[0])
            dic.pop(name_list[0])
            delete_name = name_list[0]
            while delete_name in name_list:
                name_list.remove(delete_name)

        elif a[0]+' '+a[1] in dic:
            name_list.append(a[0]+' '+a[1])
            dic[a[0]+' '+a[1]] = str(name_list.count(a[0]+' '+a[1]))
            break
        else:
            break
    else:
        name_list.append(a[0]+' '+a[1])
        dic[a[0]+' '+a[1]] = str(name_list.count(a[0]+' '+a[1]))

for key, item in dic.items():
    print(key + ' '+ item, end='\n')

发表于 2023-03-22 22:15:27 回复(0)
import sys

dict = {}
for line in sys.stdin:
    file_path,errorLine = line.split() # 以空格分割出来路径\文件名,错误行号
    file_name = file_path.split("\\")[-1][-16:] # 这里"\"就变成注释了,只有两个\\才能表示\字符。并获取文件名的后16位
    file_new_name = file_name + " " + errorLine # 重新定义文件名方便去重统计数量,新文件名格式(文件名 错误行号)
    if file_new_name not in dict: # 新文件名及去重统计的数量 以键值对形式存放在dict{}中
        dict[file_new_name] = 1
    else:
        dict[file_new_name] += 1
f = list(dict.keys())[-8:] # 把字典中所有的键转换成列表,并只用最后8个键
for key in f:  
    print(key,dict[key])

发表于 2023-03-13 15:59:36 回复(0)
content = []
false_n = 0
while True:  # 循环输入,并记录所有错误(最后16个字符)
    try:
        str = input()
        if str == "":
            break
        else:
            false_cont = list(str.split("\\"))
            # print(false_cont)
            con_tail = list(false_cont[-1])  # 算入行号

            # print(con_tail)
            # con_tail.pop(0)
            # print(con_tail)
            # print(len(con_tail))
            if len(con_tail) > 20:
                num = len(con_tail) - 20
                #     # co=reversed(con_tail)
                #     # print(co)
                for i in range(num):
                    con_tail.pop(0)

            # print(con_tail)
            con_tail = "".join(con_tail)
            # print(con_tail)
            #     # con_tail=co.reverse
            content.append(con_tail)
            # false_n+=1E:\je\rzuwnjvnuz 633
            # tent = set(content)#去重
            # # if len(tent)>8:
            # #     break
            # tent = list(tent)
            # # re_tent=reversed(tent)
            #
            # if len(tent)>8:
            #     num = len(tent) - 8
            #     for i in range(num):
            #         tent.pop(0)
    except:
        break

# print(content)

tent = set(content)  # 去重
tent = list(tent)
if len(tent) > 8:  # 超过8个,剔除最后8个之前的错误记录
    n = len(tent) - 8
    for i in range(n):
        tent.pop(0)
# print(tent)
k = []
for ele in tent:
    m = 0
    for each in content:
        if each == ele:
            m += 1
    k.append(m)

for i, ele in enumerate(tent):
    print(ele, k[i])

发表于 2023-03-09 09:19:27 回复(0)
import sys

d = {}
for line in sys.stdin:
    path, errorLine = line.strip().split()
    fileName = path.split("\\")[-1][-16:]
    newFileName = fileName + "\\" + errorLine
    if newFileName not in d:
        d[newFileName] = [errorLine, 1]
   
    else:
        d[newFileName][1] += 1

target = list(d.keys())[-8:]
for key in target:
    print(key.split("\\")[0], d[key][0], d[key][1])
主要点在于使用字典作为数据结构存储的时候,相当文件名不同错误行不会被视为同一个错误,那就直接把文件名+行号一起作为字典键就行了。

发表于 2023-03-02 23:05:18 回复(0)
lst, new_lst, dic = [], [], {}
while True:
    try:
        filename = input().strip().split('\\')[-1]
        f_lst = filename.split()
        if len(f_lst[0]) > 16:
            Filename = f_lst[0][-16:] + ' ' + f_lst[1]
        else:
            Filename = filename
        lst.append(Filename)
    except:
        break
for i in lst:
    dic[i] = 'a'
for i in dic.keys():
    tmp = i
    cnt = lst.count(i)
    tmp += ' ' + str(cnt)
    new_lst.append(tmp)
if len(new_lst) > 8:
    for i in new_lst[-8:]:
        print(i)
else:
    for i in new_lst:
        print(i)

发表于 2023-02-26 16:02:34 回复(0)
感觉这题的坑在于,需要先去重,再算记录顺序
发表于 2023-02-22 20:03:19 回复(1)
import sys
import re

res = re.compile(r'.*\\[^\\]*?([^\\]{1,16})$')

res_list = sys.stdin.readlines()
result_list = []
result_dict = {}
for x in res_list:
    msg, code = x[:-1].split(' ')
    item = res.findall(msg)
    msg = item[0] + ' ' + code
    if msg not in result_list:
        result_list.append(msg)
        result_dict[msg] = 1
    else:
        result_dict[msg] += 1

for i in result_list[-8:]:
    print(f'{i} {result_dict[i]}')

用了正则,影响不大,重点是用一个列表记顺序,有则跳过,无则添加,一个字典记次数,有则加1,无则新增,
最后用列表后八个提取字典值
发表于 2023-02-07 17:19:58 回复(0)
dic = {}
list1 = []
while 1:
    try:
        st = input().split()
        name = st[0][::-1][0 : st[0][::-1].index("\\")][::-1]
        if len(name) > 16:
            name = name[-16:]
        line = st[1]
        if [name, line] not in list1:
            dic[f"{name}{line}"] = 1
            list1.append([name, line])
        else:
            dic[f"{name}{line}"] += 1
    except:
        break
list1 = list1[-8:]
for i in list1:
    print(" ".join(i), end=" ")
    print(dic[f"{i[0]}{i[1]}"])

发表于 2022-12-19 17:40:28 回复(0)
list1=[]
while True:
    try:
        list1.append(input())
    except:
        break

list2=[]
a='' #last part
for line in list1:
    a=line.split("\\")[-1]  # 这里"\"就变成注释了,只有两个\\才能表示\字符。
    if len(a)>20:
        list2.append(a[-20:]) # 因为最后有“ 6XX”就从16变20了
    else:
        list2.append(a)

count=1
list3=[]
for i in range(len(list2)):   # 计数并把计的数加在最后
    for m in range(len(list2)):
        if list2[i]==list2[m] and i!=m:
            count+=1
    list3.append(list2[i]+" "+str(count))
    count=1

list3_set=list(set(list3))   #去重并使列表有序
list3_set.sort(key=list3.index)

for i in list3_set[-8:]: #一共9个元素,输出最后8个
    print(i)

发表于 2022-12-12 10:11:01 回复(0)

问题信息

难度:
33条回答 66139浏览

热门推荐

通过挑战的用户

查看代码