Okay, here's what I'm thinking:
Enzymes are defined by 32 bits, like this:
52 E8 A0 96
Then the program takes this, turns it into a string of bits, and shuffles those bits in a predefined way.
So if enzymes were 4 bits instead of 32, it might be rearranged like this:
0110
0 = 1st bit
1 = 2nd bit
1 = 3rd bit
0 = 4th bit
New shuffled version:
1010
1st bit in new number = 3rd bit in old number
2nd bit in new number = 1st bit in old number
3rd bit in new number = 2nd bit in old number
4th bit in new number = 4th bit in old number.
Activation sites (the actual part that does the work) is a defined patterns of bits, say 7-9 bits long. We search the new bit array for these activation sites. Then we take 3 bits each from the ends of the activation site.
Like this:
01100100110110010101001100101110 ->new enzyme pattern
11001010 is an activation pattern for digesting elemental sulfur.
We find this at position 12 in the enzyme pattern. We take bits 9,10,11,20,21,and 22.
We combine these 6 bits, using bit shuffling again, into a number. (might just feed the 6 bits into a random number generator). This number is in the range of 0 - 64. This represents its efficiency, with 0 being not working and 64 being absolutely no energy loss in digestion.
This means one enzyme may work at more than one food type, but in order to find an enzyme that really works well you might break its multicapability. Also means that its difficult to figure out what the original 8 hex codes do to an enzymes workings, so you'll have to run those mutation sims! Also means that a single mutation of a bit probably won't break the whole enzyme.
A quick side possibility, I could make the enzyme patterns circular. This would make it more possible to find activation sites in the code. Real enzymes can be arbitrarily long, and I can't model that. The circular enzyme patterns are a compromise.
Wish schvarz was here. He's going to come back and be like "no no no no no no! You've got it all wrong." Too bad, that's what you get for going on vacation :angry: