Іноді, коли я вводя IPv4-адресу, я отримую всі цифри правильно, але забуваю вводити один або кілька періодів. Я хотів би мати програму (або функцію), яка приймає мою порушену IPv4-адресу і виводить усі можливі дійсні місця пропуску періодів, що відсутні.
Вхідні дані
Вхід завжди буде рядком, який є перетворенням дійсної адреси IPv4 (див. Деталі нижче). Він завжди трансформувався виключно шляхом усунення одного або декількох символів періоду.
Вам не потрібно обробляти входи поза цим форматом.
Вихідні дані
Колекція або перелік рядків у будь-якому конкретному порядку чи форматі, що представляють усі дійсні адреси IPv4, які можна створити з введення шляхом вставки символів періоду у вхід.
- Вихідним може бути список рідної мови або інший упорядкований або не упорядкований тип колекції.
- Крім того, це може бути послідовність рядків адреси IPv4, визначеною ясним чином.
- Якщо ви використовуєте одно символьний роздільник для розмежування рядка, крапки та цифри заборонені як розділовий знак з одним символом. Я усвідомлюю, що, на відміну від чисел, періоди як роздільники не є неоднозначними (оскільки кожен четвертий період обов'язково буде розмежувачем), але заради читабельності я його забороняю.
Формат адреси IPv4
Хоча адреси IPv4 насправді є лише послідовністю чотирьох двійкових октетів, у цьому виклику використовується обмежений крапковий крапковий формат.
- IPv4-адреса - це чотири десяткових значення, розділених трьома періодами.
- Кожне з чотирьох значень знаходиться в діапазоні
0
до255
включно. - Провідні нулі заборонені в будь-якому значенні числа. (Ізольований з одного символу
0
допускаються; будь-яке інше число , починаючи з нулем не є:052
,00
і т.д.)
Випробування
Введення знаходиться у першому рядку, вихід у другому рядку (тут структуровано як розділений комами список цитуваних рядків, розділених комами, оточений [
]
, але ви можете використовувати будь-який розумний формат чи структуру, як зазначено вище). Деякі приклади мають примітки до третього рядка, щоб виділити застосування певного правила.
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"]
(Я зробив ці приклади вручну, тому, будь ласка, попередити мене про будь-які помилки, які ви можете знайти.)