BrowserUk has asked for the wisdom of the Perl Monks concerning the following question:
Given the 16 x 4-bit patterns: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Is it possible to combine them is such a way that results in a single, length unspecified, binary string that only contains each of those 16 bit patterns (in any-aligned four bit field) exactly once?
Ie. if you start with 0000, then the next pattern must start with a 1; else the 0000 repeats immediately.
That is: 00000001 contains '0000' at offset 0; (0000)0001 but also at offsets: 1 0(0000)001, 2 00(0000)01 and 3 000(0000)1; which is what must be avoided.
So, if you start with 0000 & 1000: 00001000 then the repeated '0000' is avoided; but the no matter what you put next:
000010001xxx 0001 repeats 0(0001)(0001)xxx 000010000xxx 0000 repeats (0000)1(0000)xxx
Beyond a brute force examination of all the permutations, which would be doable for 16 x 4 bits, but not for much bigger, is there some algorithm for performing such a combination?
This reminds me of something I've seen at some point, but the only thing that's coming out of my brain at the moment is Gray Codes, but I can't see how to apply it.
Thoughts?
|
|---|