introduzione
I nomi dei file possono variare enormemente, da semplici blah.txt
a 303549020150514101638190-MSP0.txt
. Il primo è generalmente generato dall'uomo, mentre il secondo è spesso generato automaticamente. Non sarebbe bello avere una semplice funzione per fare ipotesi istruite sull'opportunità o meno di considerare un file "amico degli umani"?
Ispirato a un post di Eduard Florinescu che da allora è stato cancellato. La sua idea era buona, ma aveva solo bisogno di essere scaricata.
Sfida
Scrivi un programma o una funzione nella lingua di tua scelta che può prendere una stringa e determinare se è considerato "amico dell'uomo", come definito da questa sfida.
Alcuni ulteriori dettagli e regole sono i seguenti:
- L'input sarà una stringa composta dai 95 caratteri ASCII stampabili.
- "amico dell'uomo" è definito in tal modo:
- Escludere l'estensione nella considerazione. Un'estensione è definita come il periodo finale seguito da una serie di caratteri alfanumerici (da un minimo di 1 a un massimo di 6).
- Non più della metà della stringa di lunghezza (esclusa l'estensione) può essere costituita dai seguenti raggruppamenti di caratteri definiti (combinati):
- Caratteri decimali più lunghi di 8 di fila.
- Caratteri esadecimali (maiuscolo xo minuscolo) di almeno 16 di fila (devono essere costituiti da lettere e numeri e di cui almeno un terzo dei caratteri sono numeri).
- Caratteri Base64 (usando
%+=
come caratteri speciali) di almeno 12 di fila (devono essere composti da lettere e numeri, devono essere in maiuscolo e minuscolo e di cui almeno un terzo dei caratteri sono lettere maiuscole).
- Se uno dei raggruppamenti di cui sopra si sovrappone in definizione (come uno che si qualifica come base64, ma ha 8 cifre di seguito), scegliere il più lungo da escludere.
- L'output dovrebbe essere un valore di verità o di falsità, a seconda che la stringa sia considerata "umana o meno".
- Supponiamo che verrà utilizzato solo un input valido. Non preoccuparti della gestione degli errori.
Il vincitore sarà determinato dal programma / funzione più breve. Saranno selezionati in almeno 7 giorni, o se / quando ci sono stati abbastanza invii. In caso di pareggio, vince la risposta precedente.
Esempi
Ecco alcuni esempi di input e output che il tuo codice dovrebbe essere in grado di gestire:
"results_for__michael_greer.txt.zip" => true
"Georg Feuerstein - Connecting the Dots.pdf" => true
"M People - Search for the Hero-ntuqTuc6HxM.mp4" => true
"index.html?v=QTR4WGVTUzFsV3d8NHxvcmlnaW5hbHx8MTExMTAxBHxodHRwOi8vLCwsLHRyLDcsMA%3D%3D.html" => false
"ol2DCE0SIyQC(173).pdf" => false
"d41d8cd98f00b204e9800998ecf8427e.md5" => false
"12792331_807918856008495_7076645197310150318_o.jpg" => false