Sobes.tech
Middle+

"""Escreva um código que extraia links do texto bruto e os ordene de acordo com regras específicas. A lista de links que será retornada não deve conter duplicados. As regras de ordenação são as seguintes: - Prioridade 1: Primeiro, os links detectados inicialmente, na quantidade de self.first_extracted_links - Prioridade 2: Depois, links para discos na nuvem e documentos (Yandex Disk, etc.) - Prioridade 3: Em seguida, links para arquivos (com extensões .exe, .pdf, .rar, etc. ao final do caminho) - Prioridade 4: Os links restantes ordenados de maior a menor comprimento de string Também deve considerar a limitação na quantidade de links e implementar um gerenciador de contexto. Pode ser executado, por exemplo, em [link] Resumindo: - São concedidos 30 minutos para execução - Escrever funções apply, process, funções para o gerenciador de contexto - Todos os testes devem passar - Os testes não podem ser modificados - Pode usar importações - Após escrever, pode verificar executando localmente e corrigir se necessário regex para busca de links: (?:https?|ftp):\/\/(?:[a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(?::\d+)?(?:\/[^\s()]*)?""" class LinkExtractor: DEFAULT_CLOUDS = frozenset(( "drive.google.com", "mediafire.com", "yadi.sk", "disk.yandex.ru", "cloud.mail.ru", "mega.nz" )) # Pode ampliar este método ou reescrevê-lo def __init__(self, max_links: int = 7, first_extracted_links: int = 2, clouds = None): # Número máximo de links a serem retornados self.max_links = max_links # Quantidade de links extraídos para a primeira condição self.first_extracted_links = first_extracted_links # Lista de domínios considerados na nuvem para a segunda condição self.clouds = clouds or self.DEFAULT_CLOUDS self._results = [] # Escrever este método, que adiciona parte do texto para análise def apply(self, text) -> "LinkExtractor": ... return self