Czasami, gdy wpisuję adres IPv4, wszystkie liczby są prawidłowe, ale zapominam o wpisaniu jednego lub więcej kropek. Chciałbym mieć program (lub funkcję), który pobiera mój uszkodzony adres IPv4 i wyświetla wszystkie możliwe prawidłowe miejsca brakujących kropek.
Wkład
Dane wejściowe zawsze będą ciągiem będącym transformacją prawidłowego adresu IPv4 (patrz szczegółowe informacje poniżej). Zawsze będzie transformowany wyłącznie przez wyeliminowanie jednego lub więcej znaków z okresu.
Przesłanie nie wymaga obsługi danych wejściowych poza tym formatem.
Wydajność
Zbiór lub lista ciągów reprezentujących wszystkie prawidłowe adresy IPv4, które nie mogą być tworzone w określonym porządku ani formacie, które można utworzyć z danych wejściowych poprzez wstawienie do nich znaków kropki.
- Dane wyjściowe mogą być listą natywną dla języka lub innym uporządkowanym lub nieuporządkowanym typem kolekcji.
- Alternatywnie może to być ciąg znaków adresu IPv4 ograniczony w jakiś wyraźny sposób.
- Jeśli używasz separatora jednoznakowego do rozgraniczenia łańcucha, kropki i cyfry nie są dozwolone jako separator jednoznakowy. Zdaję sobie sprawę, że w przeciwieństwie do liczb, kropki jako separatory nie są niejednoznaczne (ponieważ co czwarty kropka koniecznie byłby separatorem), ale ze względu na czytelność, nie pozwalam na to.
Format adresu IPv4
Chociaż adresy IPv4 są tak naprawdę tylko sekwencją czterech binarnych oktetów, w tym wyzwaniu zastosowano ograniczony format dziesiętny z kropkami.
- Adres IPv4 to cztery wartości dziesiętne oddzielone trzema kropkami.
- Każdy z czterech wartości mieszczą się w przedziale
0
do255
włącznie. - Zera wiodące nie są dozwolone w żadnej wartości liczbowej. (Standalone jedna postać
0
jest dozwolona; każda inna liczba zaczynając od zera nie jest:052
,00
, itd.)
Przypadki testowe
Dane wejściowe znajdują się w pierwszym wierszu, dane wyjściowe w drugim wierszu (tutaj mają strukturę rozdzieloną przecinkami listy ciągów cytowanych, oddzielonych przecinkami, otoczoną przez [
]
, ale można użyć dowolnego rozsądnego formatu lub struktury, jak określono powyżej). Niektóre przykłady zawierają uwagi w trzecim wierszu w celu podkreślenia zastosowania określonej reguły.
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"]
(Te przykłady zrobiłem ręcznie, więc proszę powiadamiaj mnie o wszelkich znalezionych błędach).