lottery algorithms