Найти - Пользователи
Полная версия: Помогите написать класс,который эмулирует такие действия%
Начало » Python для новичков » Помогите написать класс,который эмулирует такие действия%
1
Kris111
Вы – путешественник во времени, и вы исследуете структуру данных, хранящую в себе целые числа.
Каждую секунду вы совершаете одно из действий.

add(x, t) – переместиться в момент времени t и добавить в структуру число x.
Если число x в структуре есть, повторного добавления не происходит.

remove(x, t) – переместиться в момент времени t и удалить из структуры число x.
Если числа x в структуре нет, то никакое число не удаляется.

query(t) – переместиться в момент времени t и узнать какие числа находятся в данный момент в структуре.
Число x находится в структуре в момент t при выполнении текущего запроса, если в числе ранее проделанных действий было выполнено add(x, t1), t1 < t, и не было выполнено remove(x, t2), t1 < t2 < t. То есть, число было добавлено к моменту t, и не было удалено после добавления к моменту t.
ajib6ept
 from datetime import date
class Travel():
    def __init__(self):
        self.items = {}
    def get_values(self, t):
        past = filter(lambda x: x <= t, self.items.keys())
        if past:
            return self.items[max(past)]
        else:
            return []
    def add(self, x, t):
        values = self.get_values(t)
        if x not in values:
            values.append(x)
        self.items[t] = values[:]
    def remove(self, x, t):
        values = self.get_values(t)
        if x in values:
            values.remove(x)
        self.items[t] = values[:]
    def query(self, t):
        values = self.get_values(t)
        print(values)
if __name__ == '__main__':
    t = Travel()
    t.add(x=55, t=date(2017, 1, 1))
    t.add(x=5, t=date(2018, 1, 1))
    t.add(x=7, t=date(2019, 1, 1))
    t.remove(x=77, t=date(2020, 1, 1))
    t.remove(x=5, t=date(2021, 1, 1))
    t.query(t=date(2022, 1, 1))
    t.query(t=date(2019, 1, 1))
# [55, 7]
# [55, 5, 7]
Kudria
 from operator import  methodcaller, itemgetter
class TimeSet:
    
    def __init__(self):
        self.actions = []
    def add(self, x, t):
        self.actions.append((methodcaller('add', x), t))
        self._sort_actions()
    def remove(self, x, t):
        self.actions.append((methodcaller('discard', x), t))
        self._sort_actions()
    def query(self, t):
        values = set()
        for action in self.actions:
            if action[1] > t:
                break
            action[0](values)
        return values
    def _sort_actions(self):
        self.actions.sort(key=itemgetter(1))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB