"""Írjon kódot, amely kinyeri a linkeket a nyers szövegből, és azokat meghatározott szabályok szerint rendezi.
A visszaadott linklista nem tartalmazhat duplikátumokat.
A rendezési szabályok a következők:
- Elsőbbség 1: Először az elsőként észlelt linkek a self.first_extracted_links mennyiségében
- Elsőbbség 2: Ezután a felhőalapú meghajtók és dokumentumok linkjei (Yandex Disk stb.)
- Elsőbbség 3: Ezután a fájlokra mutató linkek (amelyek végén .exe, .pdf, .rar stb. kiterjesztés van)
- Elsőbbség 4: A többi link, hosszúság szerint csökkenő sorrendben
Emellett figyelembe kell venni a linkek számának korlátozását, és implementálni kell egy kontextuskezelőt.
Például futtatható a [link]-en.
Összefoglalva:
- 30 perc áll rendelkezésre a végrehajtáshoz
- Írjon apply, process függvényeket, valamint a kontextuskezelő függvényeit
- Minden tesztnek sikeresen kell lefutnia
- A teszteket nem lehet módosítani
- Használhat importokat
- A kód megírása után helyben futtatva ellenőrizheti, és szükség esetén javíthatja
linkek keresésére regex: (?: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"
))
# Ezt a metódust bővítheti vagy átírhatja
def __init__(self, max_links: int = 7, first_extracted_links: int = 2, clouds = None):
# Maximális linkek száma, amit vissza kell adni
self.max_links = max_links
# Az első feltételhez kivont linkek száma
self.first_extracted_links = first_extracted_links
# A felhőként elfogadott domainek listája
self.clouds = clouds or self.DEFAULT_CLOUDS
self._results = []
# Írja meg ezt a metódust, amely hozzáad egy részt a szövegből, amit később elemezni kell
def apply(self, text) -> "LinkExtractor":
...
return self