class SimpleGrayCodeBinaryRepresentation extends SimpleBinaryRepresentation {

    @Override
    protected boolean[] decodeGenomeToBinary() {
        boolean[] binaryGenome = new boolean[this.genome.length];
        int index = 0; // index in entire genome; stored from MSB to LSB
        for (int variable = 0; variable < this.descriptor.numVariables; variable++){
            binaryGenome[index] = this.genome[index++]; // MSB bit of every variable is preserved
            for (int i = 1; i < this.descriptor.variablesLengths[variable]; i++){
                binaryGenome[index] = binaryGenome[index-1] ^ this.genome[index++];
            }
        }

        return binaryGenome;
    }

    public  SimpleGrayCodeBinaryRepresentation(SimpleBinaryGenomeDescriptor descriptor);
    public  SimpleGrayCodeBinaryRepresentation(SimpleGrayCodeBinaryRepresentation second);

}