35
5
You have a stack of pancakes on a plate with a glob of syrup on top so thick it can't run down the sides. You won't be happy to eat until both faces of each pancake have at least touched the syrup, but right now only one face of the top pancake has.
You know that the syrup will never soak through even one pancake, but it can be transferred indefinitely via face-to-face contact between two pancakes. Once a face of a pancake has touched syrup it is considered coated in syrup forever, and will make any non-syrup coated face that touches it syrup coated as well. It is possible to transfer syrup to and from the top side of the plate as well.
You proceed to coat every pancake face with syrup by inserting a spatula below one or more pancakes and flipping them all over, exactly as is done in pancake sorting. (Unfortunately this spatula is syrup-resistant, and does not help to distribute the syrup by touching pancake faces.) Sadly you lose track of which pancake faces have touched syrup but you do remember the flips you have made.
Given your past flips can you determine if your pancakes are all coated with syrup yet?
Challenge
Write a program that takes in a positive integer N for the number of pancakes, and a list of positive integers (all <= N) for the flips you have made so far. Each number in the list represents the number of pancakes that were flipped. Output a truthy value if the pancakes are done being coated and a falsy value if not. (truthy/falsy definition)
The input should come from stdin or the command line and the output should go to stdout (or closest alternatives). It's fine if your input needs a little extra formatting: e.g. [1, 1, 2, 2]
instead of 1 1 2 2
for the list.
Examples
Assume N = 2, so we have a stack of two pancakes on a plate, starting with the syrup on top.
If the list is 1 1 2 2
, this means we...
- flip the top pancake - coating the upper face of the bottom pancake
- flip the top again - coating the original bottom face of the top pancake
- flip both - coating the plate
- flip both again - coating the original bottom face of the bottom pancake
Since all four faces are coated the output would be something like True
or 1
.
If the list is 1 2 2 1
, this means we...
- flip the top pancake - coating the upper face of the bottom pancake
- flip both - coating nothing
- flip both again - coating nothing
- flip the top again - coating the original bottom face of the top pancake
Since the face touching the plate is still syrup-free the output would be something like False
or 0
.
Notes
- The flip list may be arbitrarily large and can be empty, in which case the output is falsy.
- The plate acts as a syrup-carrier but it doesn't matter if it gets coated or not. (In fact any flip solution will coat the plate because the pancake face it touches must be coated, but regardless.)
- The plate cannot be flipped.
- You can assume these pancakes are unit disks with no sides to speak of, only two opposite faces.
Scoring
This is code-golf. The shortest solution in bytes wins.
4This is a very, very nice challenge. ;) – Soham Chowdhury – 2014-09-27T09:13:19.023
is a function that gets a list and returns a boolean is okay? – proud haskeller – 2014-09-27T10:43:08.330
@proudhaskeller Not if your language has support for stdin/command line. – Calvin's Hobbies – 2014-09-27T10:46:53.800
"The top side of the plate can also be syrup coated" is ambiguous. I think it would be clearer as "It is possible to transfer syrup to and from the top side of the plate". – Peter Taylor – 2014-09-27T11:21:24.830
9
There should be a bonus if anyone can implement it in this language.
– grc – 2014-09-27T12:25:20.9433@grc There is now a bounty for just that! – Calvin's Hobbies – 2014-10-01T04:00:00.077
@Calvin'sHobbies Awesome! It looks hard though... – grc – 2014-10-01T05:48:07.950
Is there an upper limit for the number of pancakes? – TwiNight – 2014-10-03T15:15:06.580
@TwiNight No, except for some reasonable int max value like 2^16. – Calvin's Hobbies – 2014-10-03T16:31:39.957
I did try to do this in Pancake Stack. It is way too hard. However, I feel honored to have my ugly, quickly thrown together interpreter being used (hopefully). – Justin – 2014-10-07T06:31:19.563
2Heres my solution in Pancake Stack:
Put syrup on the pancakes!
;) – rodolphito – 2014-10-07T07:20:30.983If I have understood that correctly, a working Pancake Stack solution should be about 300 lines long. It has neither arrays nor 3-variable rotations. – jimmy23013 – 2014-10-09T11:29:54.857