Software monocultures are susceptible to large scalesecurity attacks as attacks on a single node can be effortlesslyscaled out to the rest of the system. Program diversity hasbeen explored as a means of defending systems from mass scalesecurity attacks and system failures. Existing diversity techniqueshave focused on reordering code blocks to alter the controlflow graph. In contrast, we focus on algorithmic diversity. Wepresent an algorithmic diversity approach that is fully automatedend to end by adopting techniques in program synthesis. Wedemonstrate how our approach can be deployed as a defenceagainst code reuse attacks and against common software faults.