A veces, cuando escribo una dirección IPv4, obtengo todos los números correctos, pero olvido escribir uno o más puntos. Me gustaría tener un programa (o función) que tome mi dirección IPv4 rota y muestre todas las ubicaciones válidas posibles de los períodos faltantes.
Entrada
La entrada siempre será una cadena que es una transformación de una dirección IPv4 válida (ver detalles a continuación). Siempre se habrá transformado únicamente por la eliminación de uno o más caracteres de punto.
Su envío no necesita manejar entradas fuera de este formato.
Salida
Una colección o lista, en ningún orden o formato particular, de cadenas que representan todas las direcciones IPv4 válidas que se pueden crear a partir de la entrada mediante la inserción de caracteres de punto en la entrada.
- La salida puede ser una lista nativa del idioma u otro tipo de colección ordenada o no ordenada.
- Alternativamente, puede ser una secuencia de cadena de dirección IPv4 delimitada de alguna manera clara.
- Si usa un delimitador de un solo carácter para delimitar su cadena, no se permiten puntos ni dígitos como ese delimitador de un solo carácter. Me doy cuenta de que, a diferencia de los números, los períodos como delimitadores no son ambiguos (ya que cada cuarto período necesariamente sería un delimitador), pero en aras de la legibilidad, lo estoy rechazando.
Formato de dirección IPv4
Si bien las direcciones IPv4 son realmente solo una secuencia de cuatro octetos binarios, este desafío utiliza un formato decimal con puntos restringido.
- Una dirección IPv4 son cuatro valores decimales separados por tres puntos.
- Cada uno de los cuatro valores está en el rango
0
de255
, inclusive. - Los ceros iniciales no están permitidos en ningún valor numérico. (Independiente de un solo carácter
0
se permite; cualquier otro número que empieza con un cero no es:052
,00
, etc.)
Casos de prueba
La entrada está en la primera línea, la salida en la segunda línea (aquí, estructurada como una lista separada por comas de cadenas entre comillas, separadas por comas, rodeadas por [
]
, pero puede usar cualquier formato o estructura razonable, como se especificó anteriormente). Algunos ejemplos tienen notas en una tercera línea para resaltar la aplicación de una regla particular.
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"]
(Hice estos ejemplos a mano, así que avíseme de cualquier error que pueda encontrar).