Each candidate program renders onto a 256×256 1-bit canvas, and the fitness function is the Jaccard index between the rendered image and the target.
The fun part is that the result gradually improves the longer it runs. With 4 chains and a 3-hour budget, I got results around 0.95–0.98 Jaccard on a few examples. (+ 1 hour budget still works well)