# A taxonomy of 4x4 patterns

A TAXONOMY OF 4 X 4 tiles of 1 bit per pixels, according to symmetries. What symmetries am I counting?

1. inverse of colors
2. horizontal flip
3. vertical flip
4. 90 degree rotations.
5. wrap-around offsets of the pixels (2 and 1 pixels, up and down making this 4 total mutations)
6. the above in every possible combination
7. sorted by the unique results.

first up, there’s two patterns that yield only two unique results after undergoing all of the above. Checkerboard, and pure black/white.

for the purposes of encoding an image, and we like variable width codes, the best way to do this seems to be to stick with the maximum width being “a code”, with smaler widths secretly being one big width code representing semantically, two or more smaller codes, this might be equivalent to huffman?

file:///Volumes/dev/organised/4x4%20experiments/enumerate256b.html

## how enumeration works

1. enumerate every 4x4 1bit plane (65536).
2. for each, apply the permutations: hflip, vflip, rotate90, invert, in each of the 16 possible combinations.
3. associate all the resulting combinations with a sequential index
1. 3a. optionally index “palindromic” patterns that match one or more permutations of themselves.
4. add all the resulting combinations to a set of 1-bit planes that will now be skipped and not tested.
5. call the resulting set BP, with each sequential index being associated with a related set of permutations. the canonical permutation for each item in BP is the one with the lowest numerical value.
6. produce a reverse lookup to find the canonical representation for any 16-bit number, plus the 4 bit hvri number needed to transform the canonical to the supplied.
7. for each {BPi,BPi,BPi} set:
8. For each resulting image, remap 0-7 in every permutation.
9. permute every combination of HVRI,HVRI,HVRI
10. take resulting set and apply a sequential index called 3BPi
11. and the resulting permutations to a list of {BPi,BPi,BPi} that will not be checked, skipped.

the one with the lowest numerical value. 6. produce a reverse lookup to find the canonical representation for any 16-bit number, plus the 4 bit hvri number needed to transform the canonical to the supplied. 7. for each {BPi,BPi,BPi} set: 8. For each resulting image, remap 0-7 in every permutation. 9, permute every combination of HVRI,HVRI,HVRI 10, take resulting set and apply a sequential index called 3BPi 11, and the resulting permutations to a list of {BPi,BPi,BPi} that will not be checked, skipped.

numbers to the right = 16 symmetry group ids.

ID calculated by the lowest hexidecimal numeric value of the tiles in the group, when a tiles’ bitpatterns are converted to numbers.

0000

2

5a5a

2

0F0F

4

0505

8

36c9

8, 36c9

00FF

0FF0

8, 00FF

33cc 6996

3cc3

8, 33cc

3c3c

5aa5

8, 3c3c

00F0

000F

16

0104

0208 050A

16 16

16, 05F5 16. 05FA

2184

1842 1A4A

1842

1248 2585

16 16

174d

174d 1e1e

1d47

1d47 2d2d

16 16

1 pixel, every configuration

0001

0002

0002

0020

32

2 pixels in every configuration.

0003

0022

0060

selection of 4096 tiles

corners no shift symmetry

hamming pattern

xor masking the 2x2 patterns to find sets

in other word, xor masking doubled 2x2 patterns on these 4x4 patterns can produce every other pattern.

Hamming distance of 1 from each progressive tile

removed from occurring in the rest.

in other words, each tile cannot have

same but with shifting symmetries added in. is there a difference?

hamming distance 2 eliminated

partially sorted by hand

only flipping and inversion

from the other category, some interesting groups

L: 8 o: 1e22 i: 279

L: 8 o: 1e2a i: 280

L: 8 o: 71f i: 124

one of the many x256 groups

I’ve clearly screwed something up. there’s duplicates here.