Kadang-kadang ketika saya mengetik alamat IPv4, saya mendapatkan semua nomor dengan benar, tapi saya lupa mengetik satu atau lebih periode. Saya ingin memiliki program (atau fungsi) yang mengambil alamat IPv4 saya yang rusak dan menampilkan semua kemungkinan penempatan yang valid dari periode yang hilang.
Memasukkan
Input akan selalu berupa string yang merupakan transformasi dari alamat IPv4 yang valid (lihat keterangan di bawah). Itu akan selalu telah ditransformasikan semata-mata oleh penghapusan satu atau lebih karakter periode.
Kiriman Anda tidak perlu menangani input di luar format ini.
Keluaran
Kumpulan atau daftar, tanpa urutan atau format tertentu, dari string yang mewakili semua alamat IPv4 yang valid yang dapat dibuat dari input dengan memasukkan karakter periode ke dalam input.
- Outputnya mungkin berupa daftar asli-bahasa atau jenis koleksi lain yang dipesan atau tidak.
- Atau, itu mungkin urutan string alamat IPv4 dibatasi dengan cara yang jelas.
- Jika Anda menggunakan pembatas satu karakter untuk membatasi string Anda, titik dan digit tidak diperbolehkan sebagai pembatas satu karakter. Saya menyadari bahwa, tidak seperti angka, periode sebagai pembatas tidak ambigu (karena setiap periode keempat akan menjadi pembatas) tetapi demi keterbacaan, saya tidak mengizinkannya.
Format alamat IPv4
Sementara alamat IPv4 sebenarnya hanya urutan empat oktet biner, tantangan ini menggunakan format desimal bertitik terbatas.
- Alamat IPv4 adalah empat nilai desimal yang dipisahkan oleh tiga periode.
- Masing-masing dari empat nilai berada di kisaran
0
untuk255
, inklusif. - Angka nol di depan tidak diizinkan dalam nilai angka apa pun. (Standalone satu karakter
0
diperbolehkan; nomor lain dimulai dengan nol adalah tidak:052
,00
, dll)
Uji Kasus
Input ada di baris pertama, output di baris kedua (di sini, disusun sebagai daftar string yang dikutip koma, dipisahkan oleh koma, dikelilingi oleh [
]
, tetapi Anda dapat menggunakan format atau struktur yang masuk akal, seperti yang ditentukan di atas). Beberapa contoh memiliki catatan pada baris ketiga untuk menyoroti penerapan aturan tertentu.
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"]
(Saya membuat contoh ini dengan tangan, jadi tolong beri tahu saya jika ada kesalahan yang Anda temukan.)