有时,当我输入一个IPv4地址时,我会正确地输入所有数字,但忘记输入一个或多个句点。我想要一个程序(或函数),该程序可以使用损坏的IPv4地址并输出缺失期的所有可能有效位置。
输入值
输入将始终是一个字符串,该字符串是有效IPv4地址的转换(请参见下面的详细信息)。它总是将仅通过消除一个或多个时期字符来进行转换。
您的提交不需要处理此格式以外的输入。
输出量
代表所有有效IPv4地址的字符串的集合或列表(没有特定的顺序或格式),可以通过在输入中插入句点字符来从输入中创建所有有效的IPv4地址。
- 输出可以是语言本机列表或其他有序或无序集合类型。
- 替代地,它可以是以某种明确方式界定的IPv4地址的字符串序列。
- 如果您使用单字符定界符来分隔字符串,则不允许使用句点和数字作为该单字符定界符。我认识到,与数字不同,句点作为分隔符不是模棱两可的(因为每个第四个句点都必须是分隔符),但是出于可读性考虑,我不允许这样做。
IPv4地址格式
尽管IPv4地址实际上只是四个二进制八位字节的序列,但此挑战使用了受限的点分十进制格式。
- IPv4地址是由三个句点分隔的四个十进制值。
- 每四个值的范围是
0
到255
,包容性。 - 任何数字值都不允许前导零。(独立单字符
0
被允许;开始与零的任何其它数量不是:052
,00
等)
测试用例
输入在第一行上,输出在第二行上(此处,结构是用逗号分隔的带引号的字符串列表,用逗号分隔,并用包围[
]
,但是您可以使用上面指定的任何合理的格式或结构)。一些示例在第三行上有注释,以突出显示特定规则的应用。
192.168.1234
["192.168.1.234", "192.168.12.34", "192.168.123.4"]
192.1681234
["192.16.81.234", "192.168.1.234", "192.168.12.34", "192.168.123.4"]
(Note: 192.1681.2.34 (etc.) is illegal because 1681 is greater than 255)
1921681.234
["19.216.81.234", "192.16.81.234", "192.168.1.234"]
1921681234
["19.216.81.234", "192.16.81.234", "192.168.1.234", "192.168.12.34", "192.168.123.4"]
192.168.1204
["192.168.1.204", "192.168.120.4"]
(Note: 192.168.12.04 is illegal because of leading zero)
192.168.123
["1.92.168.123", "19.2.168.123", "192.1.68.123", "192.16.8.123", "192.168.1.23", "192.168.12.3"]
192.168.256
["192.168.2.56", "192.168.25.6"]
(Note: Any combination that would leave 256 intact is illegal)
120345
["1.20.3.45", "1.20.34.5", "1.203.4.5", "12.0.3.45", "12.0.34.5", "120.3.4.5"]
(Note: 12.03.4.5 (etc.) is illegal due to leading zero.)
012345
["0.1.23.45", "0.1.234.5", "0.12.3.45", "0.12.34.5", "0.123.4.5"]
(Note: the first segment must be 0, because `01` or `012` would be illegal.)
000123
["0.0.0.123"]
(我手工制作了这些示例,因此,如果您发现任何错误,请提醒我。)