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