fcn topswops(n){ flip:=fcn(xa){ if (not xa[0]) return(0); xa.reverse(0,xa[0]+1); // inplace, ~4x faster than making new lists return(1 + self.fcn(xa)); }; (0).pump(n,List):Utils.Helpers.permute(_).pump(List,"copy",flip).reduce("max"); } foreach n in ([1 .. 10]){ println(n, ": ", topswops(n)) }