To round off my look at solutions for GridOS 1, here a few more general thoughts.

Characteristics of a good rules program:
- Delay some of the processing of the input until later. Like, if I see a D now, add a C at the end of string for later processing and do the difference between C and D now (write 2 P’s). (Details.) A lot of the time, the rule invoked for the delayed processing would already have been in use, so we don’t add an extra rule.
- Split the program into subprograms, that run in different situations. Like, if the 1st character is a B, only certain rules will be used. (Details.) For each case, there are a limited number of rules in use. And it might handle the situation, where separate rules to spread the heads and process the 1st input uses up a lot of rules.
- Consider “write a lot now, be prepared to delete some later”. (Details.) Writing a lot at the beginning might save a step/rule later. It might also be, that the logic to write/delete is easier than wait/do nothing.
- It’s probably better to have a “complicated move right, easy move left and down” way to handle multiple lines of input. (Details.) It might be possible to have 1 rule to handle the “move left” part.
- Consider efficiency, not beauty. Write that output wherever. At the end of the line, or for no particular reason above and below the input.
- Find a shortcut. Can the puzzle be turned on its head? Can the output be written in a non-obvious place? (Details.)
- Use a structure of the input. Like, the input might actually be symmetrical/mirrored/rotated in some way. (Details.)

Characteristics of a good steps program:
- Generate the code.
- Use recursion.
- Work in more than 1 area at the same time, like doing both ends of string.
- Use as many heads as possible.
- Find an elegant solution combining these 2. (Details.)
- Tailor the program to the input? (Details.)
- Combine spreading the heads with the processing. (Details.)
- Delay some of the processing, but only a little. (Details.)
- Split the program into subprograms. (Details.)
- Write the output wherever. (Details.)
- Use a structure of the input. (Details.)
Not surprisingly there’s an overlap between the 2 lists. Not surprisingly, I was not the only one to discover the top 4 of good step strategies.
I feel ready for the next competition!





























