読者です 読者をやめる 読者になる 読者になる

Friends (CheckIO)

iterablesetの対で友人関係を表現するデータ構造Frindsクラスを作る。

Friendsは以下のメソッドをサポートする。

  • 友達の追加add, 同じデータすでに存在するときFalse, そうでないときTrueを返す。
  • 削除remove, データが存在しないときFalse, 存在するならTrueを返し削除する。
  • メンバのリストアップnames
  • ある名前が与えられたときそれの友達であるものの集合を返すconnected

集合操作ができれば難なく解けるのだがconnectedがちょい雑です。

class Friends:
    def __init__(self, connections):
        self.connections = list(connections)

    def add(self, connection):
        if connection in self.connections:
            return False
        self.connections.append(connection)
        return True

    def remove(self, connection):
        if connection in self.connections:
            self.connections.remove(connection)
            return True
        return False

    def names(self):
        return set().union(*self.connections)

    def connected(self, name):
        return set().union(*[s - set([name]) for s in self.connections if name in s])