您的盘子上有一叠煎饼,上面有一团糖浆,厚得不能从侧面流下来。在每个薄煎饼的两面都至少接触到糖浆之前,您不会高兴地进食,但目前只有顶部薄煎饼的一面可以食用。
您知道糖浆甚至不会浸透一个煎饼,但可以通过两个煎饼之间的面对面接触来无限期地转移糖浆。薄煎饼的表面接触糖浆后,将被视为永远涂有糖浆,并且任何未接触糖浆的表面也将被制成糖浆涂层。也可以将糖浆转移到板的顶侧或从板的顶侧转移。
通过将锅铲插入一个或多个煎饼下面,然后将它们全部翻转,您可以像在煎饼分选过程中一样,用糖浆在煎饼的每个表面上涂抹糖浆。(不幸的是,这把锅铲是抗糖浆的,并且不能通过触摸煎饼表面来帮助分配糖浆。)可悲的是,您无法知道哪些煎饼表面已经接触了糖浆,但是您确实记得已经进行了翻转。
考虑到您过去的情况,您可以确定煎饼是否已经全部涂上糖浆了吗?
挑战
编写一个程序,该程序将薄煎饼的数量取为正整数N,并为迄今为止进行的翻转提供一个正整数列表(所有<= N)。列表中的每个数字代表被翻转的煎饼的数量。如果薄煎饼已经涂好,则输出真值,否则输出假值。(真实/虚假定义)
输入应来自stdin或命令行,输出应进入stdout(或最接近的替代品)。如果您的输入需要一些额外的格式,那就很好了:例如,[1, 1, 2, 2]
而不是1 1 2 2
列表。
例子
假设N = 2,那么我们在盘子上有一叠两个薄煎饼,从顶部的糖浆开始。
如果列表为1 1 2 2
,则表示我们...
- 翻转顶部煎饼-覆盖底部煎饼的上表面
- 再次翻转顶部-在顶部煎饼的原始底面上涂上一层
- 同时翻转-涂板
- 再次翻转两者-在底部薄煎饼的原始底面上涂上一层
由于所有四个面都被覆盖,因此输出将类似于True
或1
。
如果列表为1 2 2 1
,则表示我们...
- 翻转顶部煎饼-覆盖底部煎饼的上表面
- 翻转两个-不涂任何东西
- 再次翻转两者-无涂层
- 再次翻转顶部-在顶部煎饼的原始底面上涂上一层
由于接触板的表面仍然不含糖浆,因此输出将类似于False
或0
。
笔记
- 翻转列表可以任意大,可以为空,在这种情况下,输出是虚假的。
- 该板充当糖浆载体,但是是否被包被都无关紧要。(实际上,任何翻转溶液都会覆盖该盘子,因为必须覆盖它碰到的煎饼面,但无论如何。)
- 该板不能翻转。
- 您可以假设这些煎饼是单位圆盘,没有面可言,只有两个相对的面。
计分
这是代码高尔夫球。以字节为单位的最短解决方案获胜。
Put syrup on the pancakes!
;)