Иногда, когда я набираю адрес 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"]
(Я сделал эти примеры вручную, поэтому, пожалуйста, предупредите меня о любых ошибках, которые вы можете найти.)