Fix my IPv4 address's missing periods
C (gcc/linux), 125 121 bytes
i;f(char*a){do{char*y=a,s[99],*x=inet_ntop(2,&i,s,99);for(;*x&&!(*x^*y&&*x^46);++x)y+=*x==*y;*x|*y||puts(s);}while(++i);}
Loops over all possible IPv4 addresses, and does a custom comparison that skips over extra dots in the generated ip address (but not in the main comparison address) to decide whether to print or not. Very slow, but should finish within 1 hour on a reasonable PC.
Pyth, 24 bytes
f&q4lJcT\.!-J`M256jL\../
Try it online
How it works
./Q all partitions of input
jL\. join each on .
f filter for results T such that:
cT\. split T on .
J assign to J
l length
q4 equals 4
& … and:
-J`M256 J minus the list of representations of [0, …, 255]
! is false (empty)
Pyth, 17 bytes, very slow
@FjLL\.,^U256 4./
Warning. Do not run. Requires approximately 553 GiB of RAM.
How it works
, two-element list of:
^U256 4 all four-element lists of [0, …, 255]
./Q all partitions of input
jLL\. join each element of both on .
@F fold intersection
Perl 5, 91 bytes
<>=~/^(([1-9]?|1\d|2[0-4])\d|25[0-5])\.?((?1))\.?((?1))\.?((?1))$(?{print"$1.$3.$4.$5 "})^/
The program expects a single line of a single input and outputs space-delimited list of candidates.
Explanation
The program exploits the backtracking feature of regex to loop over all possibilities of forming a valid IPv4 address from the input string.
^(([1-9]?|1\d|2[0-4])\d|25[0-5])\.?((?1))\.?((?1))\.?((?1))$
The IPv4 regex with optional .
, nothing of note here.
(?{print"$1.$3.$4.$5 "})
A code evaluation expression which prints out the content of the capturing groups.
^
Make the match fails and force backtracking.
Example run
$ echo "012345" | perl G89503.pl
0.12.34.5 0.12.3.45 0.1.23.45 0.1.234.5 0.123.4.5