Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2017 13:18:47

Kris111
Зарегистрирован: 2017-11-06
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите написать класс,который эмулирует такие действия%

Вы – путешественник во времени, и вы исследуете структуру данных, хранящую в себе целые числа.
Каждую секунду вы совершаете одно из действий.

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.

Офлайн

#2 Ноя. 6, 2017 16:30:57

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Помогите написать класс,который эмулирует такие действия%

 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]



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#3 Ноя. 6, 2017 21:21:09

Kudria
Зарегистрирован: 2016-10-02
Сообщения: 16
Репутация: +  1  -
Профиль   Отправить e-mail  

Помогите написать класс,который эмулирует такие действия%

 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))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version