We show how to fold a piece of paper and punch one hole so as to produce any
desired pattern of holes. Given n points on a piece of paper (finite
polygon or infinite plane), we give algorithms to fold the paper flat so that
those n points and no other points of paper map to a common location,
so that punching one hole and unfolding produces exactly the desired pattern
of holes. Furthermore, we can forbid creases from passing through the points
(allowing noncircular hole punches). Our solutions use relatively few creases
(in some cases, polynomially many), and can be expressed as a linear sequence
of folding steps of complexity O(1)—a generalization of simple
folds which we introduce.