Coating Every Pancake
Haskell, 92 90 86 84 114 110 99 98
the requirement of a full program is so annoying. I wonder why would anyone require this.
m(n:s)=all(&lt;1)$foldl(\r@(p:s)n-&gt;reverse(take n s)++(p*r!!n):drop n s)[0..n]s
main=readLn&gt;&gt;=print.m

this solution works by representing the pile of pancakes by a list of the sides, when adjacent pancakes share the same side. every side is a number, and a side is coated if it has a zero value.
run as:
*Main&gt; main
[2,1,1,2,2]
True