From 3179e95839eb9f54fd978edb8ae4a33d852d521c Mon Sep 17 00:00:00 2001 From: CaioMayMendes Date: Wed, 27 Aug 2025 09:24:48 -0300 Subject: [PATCH] feat/ Adicionado classes Node e NodeManager seguindo as regras informadas no teste --- nodes/manager.py | 39 ++++++++++++++++++++++++++++++++++++++- nodes/node.py | 25 ++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/nodes/manager.py b/nodes/manager.py index b3c1178..9f858b4 100644 --- a/nodes/manager.py +++ b/nodes/manager.py @@ -1,5 +1,42 @@ # Create here the NodeManager Class - +from nodes.node import Node +from copy import deepcopy +from typing import List class NodeManager: + nodes: List[Node] + + def __init__(self, nodes: List[Node]): + if not isinstance(nodes, list) or not all(isinstance(n, Node) for n in nodes): + raise ValueError("nodes deve ser uma lista de Node") + self.nodes = deepcopy(nodes) + + def __getitem__(self, index: int) -> Node: + return self.nodes[index] + + def __len__(self) -> int: + return len(self.nodes) + + def remove (self, node: Node): + if node not in self.nodes: + raise ValueError("Node não encontrado") + self.nodes.remove(node) + return None + + def remove_cascade(self, node: Node): + if not isinstance(node, Node): + raise ValueError("node deve ser uma instância de Node") + if node not in self.nodes: + raise ValueError("Node não encontrado") + to_remove = {node.id} + removed_any = True + while removed_any: + removed_any = False + for n in self.nodes: + if n.parent in to_remove and n.id not in to_remove: + to_remove.add(n.id) + removed_any = True + self.nodes = [n for n in self.nodes if n.id not in to_remove] + return None + pass diff --git a/nodes/node.py b/nodes/node.py index 644ab4e..4dd2350 100644 --- a/nodes/node.py +++ b/nodes/node.py @@ -1,5 +1,28 @@ # Create here the Node Class - +from typing import List, Optional class Node: + id: int + parent: int + + def __init__ (self, id:int, parent: int): + if not isinstance(id, int) or (parent is not None and not isinstance(parent, int)): + raise ValueError("Os ids devem ser inteiros") + if parent > id: + raise ValueError("O id do pai deve ser menor que o id do Node") + if parent == id: + raise ValueError("O id do pai não pode ser igual ao id do Node") + self.id = id + self.parent = parent + + def __repr__(self): + return f"Node({self.id}, {self.parent})" + + def __eq__(self, other): + if isinstance(other, Node): + return self.id == other.id and self.parent == other.parent + return False + + def __hash__(self): + return hash((self.id, self.parent)) pass