Đôi khi, khi tôi gõ một địa chỉ IPv4, tôi nhận được tất cả các số đúng, nhưng tôi quên gõ một hoặc nhiều dấu chấm. Tôi muốn có một chương trình (hoặc chức năng) lấy địa chỉ IPv4 bị hỏng của tôi và xuất ra tất cả các vị trí hợp lệ có thể có của các giai đoạn bị thiếu.
Đầu vào
Đầu vào sẽ luôn là một chuỗi chuyển đổi địa chỉ IPv4 hợp lệ (xem chi tiết bên dưới). Nó sẽ luôn luôn được chuyển đổi chỉ bằng cách loại bỏ một hoặc nhiều ký tự thời kỳ.
Bạn gửi không cần xử lý đầu vào bên ngoài định dạng này.
Đầu ra
Một bộ sưu tập hoặc danh sách, không theo thứ tự hoặc định dạng cụ thể, của các chuỗi đại diện cho tất cả các địa chỉ IPv4 hợp lệ có thể được tạo từ đầu vào bằng cách chèn các ký tự dấu chấm vào đầu vào.
- Đầu ra có thể là một danh sách gốc ngôn ngữ hoặc loại bộ sưu tập có thứ tự hoặc không có thứ tự khác.
- Ngoài ra, nó có thể là một chuỗi chuỗi địa chỉ IPv4 được phân tách theo một cách rõ ràng.
- Nếu bạn sử dụng một dấu phân cách một ký tự để phân định chuỗi của bạn, dấu chấm và chữ số không được phép làm dấu phân cách một ký tự đó. Tôi nhận ra rằng, không giống như các con số, các giai đoạn như các dấu phân cách không mơ hồ (vì mỗi giai đoạn thứ tư nhất thiết phải là một dấu phân cách) nhưng vì mục đích dễ đọc, tôi không đồng ý.
Định dạng địa chỉ IPv4
Mặc dù địa chỉ IPv4 thực sự chỉ là một chuỗi gồm bốn octet nhị phân, thử thách này sử dụng định dạng thập phân rải rác bị hạn chế.
- Địa chỉ IPv4 là bốn giá trị thập phân được phân tách bằng ba dấu chấm.
- Mỗi phòng trong số bốn giá trị nằm trong khoảng
0
đến255
, bao gồm. - Các số 0 đứng đầu không được phép trong bất kỳ giá trị số nào. (Độc lập một ký tự
0
được phép; bất kỳ số khác bắt đầu với một số không không phải là:052
,00
, vv)
Các trường hợp thử nghiệm
Đầu vào nằm trên dòng đầu tiên, đầu ra trên dòng thứ hai (ở đây, được cấu trúc như một danh sách các chuỗi được trích dẫn bằng dấu phẩy, được phân tách bằng dấu phẩy, được bao quanh bởi [
]
, nhưng bạn có thể sử dụng bất kỳ định dạng hoặc cấu trúc hợp lý nào, như được chỉ định ở trên). Một số ví dụ có ghi chú trên dòng thứ ba để làm nổi bật ứng dụng của một quy tắc cụ thể.
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"]
(Tôi đã thực hiện các ví dụ này bằng tay, vì vậy vui lòng cảnh báo tôi về bất kỳ sai lầm nào bạn có thể tìm thấy.)