这使我想起几年前有人上传了洪流“黑客工具:所有IP地址的完整列表”。当然,这只是一个约40亿个IPv4地址的生成列表,但是有数千个“ h4xx0rz”下载了它。看妈妈,imahacker!
当时是这样,但如今每个人都已切换到IPv6。(对?)
您的任务是编写一个打印所有IPv6地址的程序。
您应该编写一个完整的程序,该程序不输入任何内容并打印IPv6地址,每行显示一个,而没有其他输出。您的程序必须打印所有2 128个可能的地址,包括无效的地址。每个地址必须打印一次。您可以按任何顺序打印地址。
每个地址都可以完整打印,用冒号分隔8组4个十六进制数字,例如
2001:0db8:85a3:0000:0000:8a2e:0370:7334
您可以自行决定使用RFC 5952中的任何标准缩写:
- 可以省略组中的前导零,除非
0
不能再进一步缩写。 ::
每个地址最多可使用一次,以缩写一个或多个全零组的序列。- 十六进制数字可以使用小写或大写。
如果您达到RFC 5952的推荐制式建议(仅小写字母,表示形式尽可能短,::
如果可以在多个地方使用,请尽早使用),您将获得-20%的奖励。
由于输出的大小,当我们坐在那里时,您的程序无法完成。您的程序可能在某些时候被外部手段中断(Ctrl+ C,拔出电源,…)。您的程序必须将输出作为流产生,以便在“合理”等待之后,它将产生一些行。基本上,不允许在内存中构造一个巨大的字符串仅在最后打印出来。任何会在“标准” PC上用尽内存的程序都将被取消资格。(尽管如此,如果您的程序运行了足够长的时间,它必须打印所有IPv6地址,然后退出。)
(如果这种情况对于运行该程序直到完成并随后让您看到输出的Web解释器来说是一个问题,并且您没有托管的解释器,请在问题的较小版本上测试您的程序,然后仔细进行调整到完整的2128。)
您的分数是程序的长度(以字节为单位),如果获得奖励,则乘以0.8。这是代码高尔夫球,因此得分最低者获胜。