Às vezes, quando digito um endereço IPv4, acerto todos os números, mas esqueço de digitar um ou mais períodos. Eu gostaria de ter um programa (ou função) que aceite meu endereço IPv4 quebrado e produza todas as veiculações válidas possíveis dos períodos ausentes.
Entrada
A entrada sempre será uma sequência que é uma transformação de um endereço IPv4 válido (consulte os detalhes abaixo). Ele sempre será transformado exclusivamente pela eliminação de um ou mais caracteres de ponto final.
Seu envio não precisa manipular entradas fora deste formato.
Saída
Uma coleção ou lista, em nenhuma ordem ou formato específico, de cadeias que representam todos os endereços IPv4 válidos que podem ser criados a partir da entrada pela inserção de caracteres de ponto na entrada.
- A saída pode ser uma lista nativa do idioma ou outro tipo de coleção ordenada ou não ordenada.
- Como alternativa, pode ser uma sequência de cadeias de endereços IPv4 delimitada de alguma maneira clara.
- Se você usar um delimitador de caractere único para delimitar sua sequência, pontos e dígitos não serão permitidos como esse delimitador de caractere único. Percebo que, diferentemente dos números, os períodos como delimitadores não são ambíguos (uma vez que cada quarto período seria necessariamente um delimitador), mas por uma questão de legibilidade, eu o estou desaprovando.
Formato de endereço IPv4
Embora os endereços IPv4 sejam realmente apenas uma sequência de quatro octetos binários, esse desafio usa um formato decimal pontilhado restrito.
- Um endereço IPv4 é um quatro valores decimais separados por três períodos.
- Cada um dos quatro valores está no intervalo
0
de255
, inclusive. - Zeros à esquerda não são permitidos em nenhum valor numérico. (Standalone de um caracter
0
é permitido; qualquer outro número começando com um zero não é:052
,00
, etc.)
Casos de teste
A entrada está na primeira linha, a saída na segunda linha (aqui, estruturada como uma lista separada por vírgula de seqüências de caracteres entre aspas, separada por vírgulas, entre elas [
]
, mas você pode usar qualquer formato ou estrutura razoável, conforme especificado acima). Alguns exemplos têm anotações em uma terceira linha para destacar a aplicação de uma regra específica.
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"]
(Eu fiz esses exemplos manualmente, então me avise sobre quaisquer erros que você possa encontrar.)