A volte quando scrivo un indirizzo IPv4, ottengo tutti i numeri giusti, ma dimentico di digitare uno o più punti. Mi piacerebbe avere un programma (o una funzione) che prenda il mio indirizzo IPv4 rotto e produca tutti i possibili posizionamenti validi dei periodi mancanti.
Ingresso
L'input sarà sempre una stringa che è una trasformazione di un indirizzo IPv4 valido (vedere i dettagli di seguito). Sarà sempre stato trasformato esclusivamente dall'eliminazione di uno o più caratteri punto.
L'invio non deve gestire input al di fuori di questo formato.
Produzione
Una raccolta o un elenco, in nessun ordine o formato particolare, di stringhe che rappresentano tutti gli indirizzi IPv4 validi che possono essere creati dall'input mediante l'inserimento di caratteri punto nell'input.
- L'output può essere un elenco nativo della lingua o un altro tipo di raccolta ordinato o non ordinato.
- In alternativa, può essere una sequenza di stringhe di indirizzi IPv4 delimitata in modo chiaro.
- Se si utilizza un delimitatore a carattere singolo per delimitare la stringa, i punti e le cifre non sono consentiti come delimitatore a carattere singolo. Mi rendo conto che, diversamente dai numeri, i periodi come delimitatori non sono ambigui (dal momento che ogni quarto periodo sarebbe necessariamente un delimitatore) ma per motivi di leggibilità, lo sto vietando.
Formato indirizzo IPv4
Mentre gli indirizzi IPv4 sono in realtà solo una sequenza di quattro ottetti binari, questa sfida utilizza un formato decimale puntato limitato.
- Un indirizzo IPv4 è un quattro valori decimali separati da tre punti.
- Ognuno dei quattro valori sono nella gamma
0
a255
, compreso. - Gli zeri iniziali non sono ammessi in nessun valore numerico. (Autonomo di un carattere
0
che è consentito; qualsiasi altro numero che inizia con uno zero non è:052
,00
, etc.)
Casi test
L'input è sulla prima riga, l'output sulla seconda riga (qui, strutturato come un elenco separato da virgole di stringhe tra virgolette, separato da virgole, circondato da [
]
, ma è possibile utilizzare qualsiasi formato o struttura ragionevole, come specificato sopra). Alcuni esempi hanno note su una terza riga per evidenziare l'applicazione di una particolare regola.
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"]
(Ho fatto questi esempi a mano, quindi per favore avvisami di eventuali errori che potresti trovare.)