Я написал код для кругового буфера для вопроса интервью. Но, как это случилось, прошло два тестовых теста, а другие потерпели неудачу. Неисправность причины: индексный диапазон f. После этого я попробовал несколько тестовых ящиков, чтобы воспроизвести сбой. К сожалению, никто из них не воспроизводит ошибку. Вот код.Реализация пикового буфера буфера
Внедрение кругового буфера размера N. Разрешить вызывающему абоненту добавлять, удалять и перечислять содержимое буфера. Внедрите буфер для достижения максимальной производительности для каждой из операций.
«A» n - добавить в буфер следующие n строк. Если буфер заполнен, они заменяют старые записи.
«R» n - удалить первые n элементов буфера. Эти n элементов - это те, которые были добавлены ранее среди текущих элементов.
«L» - список элементов буфера в порядке их времени вставки.
"Q" - Выход.
class circbuffer():
#initialization
def __init__(self,size):
self.maximum=size
self.data=[]
self.current=0
#appending when the buffer is not full
def append(self,x):
if len(self.data)==self.maximum:
self.current=0
self.data[self.current]=x
self.current=(self.current+1)%self.maximum
self.__class__=bufferfull
else:
self.data.append(x)
def remove(self,x):
if self.data:
self.data.pop(0)
def cget(self):
return self.data
class bufferfull:
def append(self,x):
if len(self.data)<self.maximum:
self.data.insert(self.current, x)
else:
self.data[self.current]=x
self.current=(self.current+1)%self.maximum
def remove(self,x):
if self.data:
if self.current>len(self.data):
self.current=0
self.data.pop(self.current)
def cget(self):
return self.data[self.current:]+self.data[:self.current]
n=input()
buf=circbuffer(n)
outputbuf=[]
while True:
com=raw_input().split(' ')
if com[0]=='A':
n=int(com[1])
cominput=[]
for i in xrange(n):
cominput.append(raw_input())
for j in cominput:
buf.append(j)
elif com[0]=="R":
n=int(com[1])
for i in range(n):
buf.remove(i)
elif com[0]=="L":
for i in buf.cget():
outputbuf.append(i)
elif com[0]=="Q":
break
for i in outputbuf:
print i
Ошибка указывает на self.data.pop(self.current)
в классе bufferfull. Я не могу получить тестовые данные от собеседников. Я пытаюсь сам придумать тест, чтобы воспроизвести ошибку.
Любые идеи?
Я думаю, что вы делаете это излишне сложным для себя этим бизнесом 'self .__ class__'. – NPE
@NPE, я должен согласиться с вами. Я новичок в Python, и присвоение класса другому мне очень понравилось. На самом деле я влюблен в Python .. :)! Если бы был лучший способ, я был бы очень признателен за вашу помощь! –
У нас даже меньше шансов придумать подходящий тестовый пример, чем вы уже знакомы с вашим кодом ... – millimoose