Questo era allora, ma al giorno d'oggi tutti sono passati a IPv6 . (Giusto?)
Il tuo compito è scrivere un programma che stampa tutti gli indirizzi IPv6 .
È necessario scrivere un programma completo che non accetta input e stampa indirizzi IPv6, uno per riga e nessun altro output. Il programma deve stampare tutti i 2 128 indirizzi possibili, inclusi quelli non validi. Ogni indirizzo deve essere stampato esattamente una volta. È possibile stampare gli indirizzi in qualsiasi ordine.
Ogni indirizzo può essere stampato per intero, con 8 gruppi di 4 cifre esadecimali separati da due punti, ad es
2001:0db8:85a3:0000:0000:8a2e:0370:7334
È possibile, a propria discrezione, utilizzare una qualsiasi delle abbreviazioni standard di RFC 5952 :
- Gli zeri iniziali in un gruppo possono essere omessi, tranne che
0
non possono essere ulteriormente abbreviati. ::
può essere usato al massimo una volta per indirizzo per abbreviare una sequenza di uno o più gruppi tutti zero.- Le cifre esadecimali possono usare lettere minuscole o maiuscole.
Se ottieni la raccomandazione di rappresentazione da RFC 5952 (solo lettere minuscole, rappresentazione il più breve possibile, con ::
usato il più presto possibile se ci sono più posti in cui può essere usato), otterrai un bonus del -20% .
A causa delle dimensioni dell'output, non è previsto che il programma finisca mentre siamo seduti lì. Il tuo programma potrebbe essere interrotto con mezzi esterni ad un certo punto ( Ctrl+ C, togliendo energia, ...). Il tuo programma deve produrre output come stream, in modo che dopo un'attesa "ragionevole", avrà prodotto alcune righe. Fondamentalmente, non è permesso costruire una stringa gigante in memoria solo per stamparla alla fine. Qualsiasi programma che esaurirebbe la memoria su un PC "standard" viene squalificato. (Tuttavia, se il programma è stato lasciato funzionare per un tempo sufficientemente lungo, deve stampare tutti gli indirizzi IPv6 e quindi uscire.)
(Se questa condizione è un problema per gli interpreti web che eseguono il programma fino al completamento e quindi ti permettono di vedere l'output e non hai un interprete ospitato, prova il tuo programma su una versione più piccola del problema, quindi regolalo attentamente fino a 2 128. )
Il tuo punteggio è la lunghezza del tuo programma in byte, moltiplicato per 0,8 se ottieni il bonus. È il golf del codice, quindi vince il punteggio più basso.