Isso foi então, mas hoje em dia todo mundo mudou para o IPv6 . (Direito?)
Sua tarefa é escrever um programa que imprima todos os endereços IPv6 .
Você deve escrever um programa completo que não aceite entrada e imprima endereços IPv6, um por linha e nenhuma outra saída. Seu programa deve imprimir todos os 2 128 endereços possíveis, incluindo os inválidos. Cada endereço deve ser impresso exatamente uma vez. Você pode imprimir os endereços em qualquer ordem.
Cada endereço pode ser impresso na íntegra, com 8 grupos de 4 dígitos hexadecimais separados por dois pontos, por exemplo
2001:0db8:85a3:0000:0000:8a2e:0370:7334
Você pode, a seu critério, usar qualquer uma das abreviações padrão da RFC 5952 :
- Os zeros à esquerda em um grupo podem ser omitidos, exceto que
0
não podem ser abreviados ainda mais. ::
pode ser usado no máximo uma vez por endereço para abreviar uma sequência de um ou mais grupos totalmente zero.- Os dígitos hexadecimais podem usar letras minúsculas ou maiúsculas.
Se você obtiver a recomendação de representação da RFC 5952 (apenas letras minúsculas, menor representação possível, e ::
usada o mais cedo possível, se houver vários locais onde ela possa ser usada), você receberá um bônus de -20% .
Devido ao tamanho da saída, não se espera que seu programa termine enquanto estivermos lá. Seu programa pode ser interrompido por meios externos em algum momento ( Ctrl+ C, desligando a energia,…). Seu programa deve produzir saída como um fluxo, para que, após uma espera "razoável", tenha produzido algumas linhas. Basicamente, não é permitido construir uma cadeia gigante na memória apenas para imprimi-la no final. Qualquer programa que fique sem memória em um PC "padrão" é desqualificado. (No entanto, se o seu programa foi deixado em execução por tempo suficiente, ele deve imprimir todos os endereços IPv6 e depois sair.)
(Se essa condição for um problema para intérpretes da web que executam o programa até a conclusão e permitem ver a saída e você não tem um intérprete hospedado, teste seu programa em uma versão menor do problema e ajuste-o com cuidado para o total de 2 128. )
Sua pontuação é o comprimento do seu programa em bytes, multiplicado por 0,8 se você receber o bônus. É código de golfe, então a pontuação mais baixa vence.