本题将会给出
条报错信息,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每条报错信息描述如下:
在一行上先输入一个长度为
的字符串
代表文件路径;随后,在同一行输入一个整数
代表行号。
文件路径的格式如题干所述,保证文件名不为空。
至多八行,每行先输出一个长度为
的字符串
,代表文件名;随后,在同一行输出错误行号、报错次数。
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
nv=[]#初始全纪录list check=[]#初始去除重复list while True: try: word,n = input().split()#处理数据,先以空格区分 word = word.split("\\")#再以\区分 word = word[-1]#提取最后一项 if len(word) > 16:#规范为最大十六位 word = word[(len(word) - 16)::]#只要最后十六位 str1 = word + " " + n#由于要求行数和后缀完全匹配才算,直接重新合并判断这一整条就好了不用分开 nv.append(str1)#输入list里全纪录 if str1 not in check:#模拟set功能,由于set会乱序在这不能用 check.append(str1)#当为新的时候添加 except: break if len(check) > 8:#当错误记录大于8项时(去除重复),只用最后八项设n=8 n=8 else: n=len(check)#小于8项时 for i in range (n): str2 = check[(len(check)-n+i)] + " " + str(nv.count(check[(len(check)-n+i)]))#由于可能小于八项无法直接-8+i起始,换成(总长度-n+i)逐个提取 print(str2)
b={} while True: try: p=input() if not p: break a=p.split('\\') n=a[-1].split(' ') if len(n[0])<=16: x=a[-1] else: x = n[0][-16:] + ' ' + n[-1] if x not in b: b[x]=1 else: b[x]+=1 except: break if len(b.keys())<=8: for key in b.keys(): print(key,b[key]) else: c=[] for key in b.keys(): c.append(key) for i in c[-8:]: print(i,b[i]) # 一開始沒看清題,以為是按最後一次出現的算,刪掉可惜了,就注釋掉放在後邊了 # b={} # while True: # try: # p=input() # if not p: # break # a=p.split('\\') # n=a[-1].split(' ') # if len(n[0])<=16: # x=a[-1] # else: # x = n[0][-16:] + ' ' + n[-1] # if x not in b: # b[x]=1 # else: # e=b[x] # b.pop(x) # b[x]=e+1 # except: # break # if len(b.keys())<=8: # for key in b.keys(): # print(key,b[key]) # else: # c=[] # for key in b.keys(): # c.append(key) # for i in c[-8:]: # print(i,b[i])
fn_list = [] ln_list = [] cn_list = [] while True: try: str1 = input().split(' ') fn = str1[0].split("\\")[-1] if len(fn) > 16: fn = fn[-16:] ln = int(str1[1]) flag = True for i in range(len(fn_list)): if fn_list[i] == fn and ln_list[i] == ln: cn_list[i] += 1 flag = False if flag: fn_list.append(fn) ln_list.append(ln) cn_list.append(1) except: break if len(fn_list) >= 8: for i in range(len(fn_list)-8, len(fn_list)): print(fn_list[i],end=' ') print(ln_list[i],end=' ') print(cn_list[i]) else: for i in range(len(fn_list)): print(fn_list[i],end=' ') print(ln_list[i],end=' ') print(cn_list[i])
终于解决了,看了评论区的回答才明白,题意的循环记录太坑了。
#-*-coding:utf-8-*- import sys table = {} name = [] for line in sys.stdin: path, num = line.split() path = path.split("\\")[-1] key = path[-16:] + ' ' + num # 文件名 + 代码行数相同才算"相同"的错误记录。 if key not in name: if key not in table.keys(): # 题意中未阐述清楚的循环记录。若后面出现的会更新第一次出现的时间,此判断注释即可。 if len(name) == 8: # name表中只记录8条错误记录 name.pop(0) name.append(key) table[key] = 1 else: # 已经出现过的记录的值 +1 。因为不输出,不加也不影响check table[key] += 1 else: # 正常情况计数 table[key] += 1 # for i, j in zip(range(len(name)), table.keys()): for i in range(len(name)): print(name[i] + ' ' + str(table[name[i]]))
records = [] while True: try: records.append(input().split()) except EOFError: break backslash = 0 for i in range(len(records)): backslash = records[i][0][::-1].index("\\") records[i][0] = records[i][0][max(-backslash, -16):] counts = {} j = len(records) - 1 while j >= 0: if str(records[j]) not in counts: counts[str(records[j])] = 1 else: counts[str(records[j])] += 1 j -= 1 ordered = [] for k in range(len(records)): if records[k] not in ordered: ordered.append(records[k]) ordered = ordered[-8:] for n in range(len(ordered)): print(ordered[n][0], ordered[n][1], counts[str(ordered[n])])
mylist=[] while True : try : s=input() p,n=s.split(" ") name=p.split("\\")[-1] if len(name) > 16 : name = name[-16:] control = True for i in mylist : if name == i[0] and n == i[1] : i[2] += 1 control = False if control : mylist.append([name,n,1]) except : break for i in mylist[-8:] : print("%s %s %d"%(i[0],i[1],i[2]))
import sys q = [] d = {} def add_queue(key): if key in d: d[key] += 1 else: d[key] = 1 q.append(key) if len(q) > 8: # removed = q[0] q.pop(0) # d.pop(removed) def format_key(k): if len(k) > 16: return k[-16:] return k for line in sys.stdin: log = line if log == "": break s1, num = log.split("\\")[-1][:-1].split(" ") s1 = format_key(s1) + " " + num add_queue(s1) for k in q: print(k, d[k])
import sys import re from collections import OrderedDict d = OrderedDict() for s in sys.stdin: name, num = s.split() f_name = re.search(r"\\([\w\.]+)$", name).group(1) c = d.get((f_name, num), 0) d[(f_name, num)] = c+1 for key, value in list(d.items())[-8:]: f_name, num = key print(f_name[-16:], num, value)
# -*- coding: utf-8 -*- """ @author: obaby @license: (C) Copyright 2013-2020, obaby@mars. @contact: root@obaby.org.cn @link: http://www.obaby.org.cn http://www.h4ck.org.cn http://www.findu.co @file: error_recoder.py @time: 2020/10/12 9:01 @desc: """ log_list = [] count_dict = {} while True: try: line = input() file_path = line.split(' ')[0] line_number = line.split(' ')[-1] file_name = file_path.split('\\')[-1][-16:] key = file_name + ' ' + line_number if key in count_dict.keys(): count_dict[key] += 1 else: count_dict[key] =1 if key in log_list: list.remove(key) if len(log_list) >=8: log_list.pop(0) log_list.append(key) except: break for l in log_list: print(l +' '+ str(count_dict[l]))但是,这样的话会失败,实际上是不要删除旧记录,更新之前的记录:
# -*- coding: utf-8 -*- """ @author: obaby @license: (C) Copyright 2013-2020, obaby@mars. @contact: root@obaby.org.cn @link: http://www.obaby.org.cn http://www.h4ck.org.cn http://www.findu.co @file: error_recoder.py @time: 2020/10/12 9:01 @desc: """ log_list = [] count_dict = {} while True: try: line = input() if not line: break file_path = line.split(' ')[0] line_number = line.split(' ')[-1] file_name = file_path.split('\\')[-1][-16:] key = file_name + ' ' + line_number if key in count_dict.keys(): count_dict[key] += 1 else: count_dict[key] =1 if key not in log_list: log_list.append(key) except: break for l in log_list[-8:]: print(l +' '+ str(count_dict[l]))
import sys from collections import defaultdict lines = sys.stdin.readlines() err = [] dt = defaultdict(int) for i in lines: path, line_num = i.split() file_name = path.split('\\')[-1] if len(file_name) > 16: file_name = file_name[-16:] message = file_name + ' ' + line_num dt[message] += 1 if message not in err: err.append(message) if len(err) > 8: err = err[-8:] for i in err: print('{} {}'.format(i, dt[i]))
#只以第一次出现的顺序为准,后面重复的不会更新它的出现时间,仍以第一次为准 #最后出现的八条‘错误记录’!!!!!不是最后八条记录 fpath={} res=[] while True: try: new=input().split(' ') path= new[0].split('\\')[-1] if len(path)>16: path=path[-16:] k = path + ' ' + new[1] if k in fpath: fpath[k]+=1 else: fpath[k]=1 res.append(k) except: break for i in res[-8:]:#8个新错误 print(i,fpath[i])
r1,r2 = [],[] while True: try: log = input().split() file = log[0].split('\\')[-1] if len(file) > 16: file = file[-16:] if file + ' ' + log[1] in r1: r2[r1.index(file + ' ' + log[1])] += 1 else: r1.append(file + ' ' + log[1]) r2.append(1) except: break for i ,j in zip(r1[-8:],r2[-8:]): print(i + ' ' + str(j))