I think puzzles might be fine but personally would prefer an actual, useable program to be 'deliverable' of the camp. At least personally, this makes it more interesting as you would be creating some value.
Some kind of knowledge of used technologies probably should be a requirement. If participant is not familiar with, say, a programming language used, she should at least understand the paradigms used (for instance, if person has no idea of functional programming, attending one or two day camp where Haskell is used and other attendees know the language, I suspect that learning curve is simply too steep). Then again, if I know Java, and the camp I attend uses C#, I would probably be comfortable even though I've never done a single line of C#.
I would prefer demoable end result. Again, creating something concrete that might have some kind of value outside the camp is more pleasing and motivating (to me, at least). If you will be coding throw-away code, coding will be less personal. I think code camps should be very personal. People should be committed, willing learn, teach others and produce something unexpected. Developing something of use should be more motivating, and it will be easier to reflect in retrospect how the whole experience was like.
One day might be enough if people are willing to put in whole day. I'm not talking about 8 hours here, more like 16h. Wouldn't mind doing two or even three days, but more than two would definitely require scheduled time off from keyboard. People tend to really focus on problem solving and learning during camps, and couple of days of just coding, with little rest will wear you.
In general, I would recommend planning/scheduling non-coding activities to get breaks from keyboard. This regardless of how long camp you're having.
Have a nice camp!