これは当時でしたが、今日では誰もがIPv6に切り替えています。(右?)
あなたの仕事は、すべてのIPv6アドレスを出力するプログラムを書くことです。
入力を一切受け取らず、IPv6アドレスを1行に1つずつ出力し、他の出力を出力しない完全なプログラムを作成する必要があります。プログラムは、無効なものも含めて、2 128の可能なアドレスすべてを印刷する必要があります。各住所は1回だけ印刷する必要があります。アドレスは任意の順序で印刷できます。
各アドレスは、コロンで区切られた4つの16進数の8つのグループで完全に印刷できます。たとえば、
2001:0db8:85a3:0000:0000:8a2e:0370:7334
あなたの裁量で、RFC 5952の標準的な略語のいずれかを使用できます。
- グループ内の先頭のゼロは省略できますが、
0
それ以上短縮することはできません。 ::
1つまたは複数のすべてゼロのグループのシーケンスを短縮するために、アドレスごとに最大1回使用できます。- 16進数では、小文字または大文字を使用できます。
あなたが達成した場合、RFC 5952から表現勧告を(小文字のみ、最短の表現と::
、それは使用することができ、複数の場所がある場合はできるだけ早くとして使用)、あなたが得る-20%のボーナスを。
出力のサイズが原因で、プログラムがそこに座っている間に終了することはありません。プログラムは、ある時点で外部の手段によって中断される可能性があります(Ctrl+ C、電源を抜くなど)。プログラムは出力をストリームとして生成する必要があります。そのため、「合理的な」待機の後、いくつかの行が生成されます。基本的に、最後に印刷するためだけにメモリに巨大な文字列を作成することは許可されていません。「標準」PCでメモリ不足になるプログラムはすべて失格となります。(それでも、プログラムが十分な時間実行されない場合、すべてのIPv6アドレスを出力して終了する必要があります。)
(この状態が、完了するまでプログラムを実行してから出力を表示するWebインタープリターにとって問題であり、ホストされたインタープリターがない場合は、問題の小さいバージョンでプログラムをテストし、慎重に調整しますフル2 128まで。)
スコアは、プログラムのバイト単位の長さで、ボーナスを獲得した場合は0.8倍されます。それはコードゴルフですので、最低スコアが勝ちます。