プレートの上にパンケーキの山があり、その上にシロップの塊があり、厚すぎて側面を下ることができません。各パンケーキの両方の面が少なくともシロップに触れるまでは食べられませんが、今は一番上のパンケーキの片方の面だけが触れています。
シロップは1つのパンケーキにも染み込むことはありませんが、2つのパンケーキの間で直接接触することで無期限に転送できます。パンケーキの表面がシロップに触れると、シロップで永久にコーティングされたとみなされ、シロップでコーティングされた非シロップでコーティングされた面も同様にコーティングされます。シロップをプレートの上面との間で転送することもできます。
パンケーキの選別と同様に、1つ以上のパンケーキの下にヘラを挿入し、全体をひっくり返すことにより、すべてのパンケーキの表面をシロップでコーティングします。(残念ながら、このヘラはシロップ耐性があり、パンケーキの表面に触れることでシロップを配布するのに役立ちません。)悲しいことに、どのパンケーキの表面がシロップに触れたのかわからなくなりますが、あなたが作ったフリップを覚えています。
あなたの過去のフリップを考えると、あなたのパンケーキがすべてシロップでまだコーティングされているかどうかを判断できますか?
チャレンジ
パンケーキの数に正の整数Nを取り込み、これまでに行ったフリップの正の整数のリスト(すべて<= N)を取り込むプログラムを作成します。リスト内の各数字は、反転したパンケーキの数を表します。パンケーキがコーティングされている場合は真実の値を出力し、そうでない場合は偽の値を出力します。(真実/虚偽の定義)
入力はstdinまたはコマンドラインから取得し、出力はstdout(または最も近い代替)に送信する必要があります。入力に少し余分な書式設定が必要な場合は問題ありません。たとえば、リストの[1, 1, 2, 2]
代わりに1 1 2 2
。
例
N = 2と仮定すると、プレート上に2つのパンケーキのスタックがあり、上からシロップが始まります。
リストがの場合1 1 2 2
、これは...
- 上部のパンケーキを反転-下部のパンケーキの上面をコーティング
- 再びトップを反転-トップパンケーキの元の底面をコーティング
- 両方を裏返す-プレートをコーティングする
- 両方を再び反転-ボトムパンケーキの元の底面をコーティング
すべての4つの面がコーティングされているので、出力は次のようなものになるだろうTrue
か1
。
リストがの場合1 2 2 1
、これは...
- 上部のパンケーキを反転-下部のパンケーキの上面をコーティング
- 両方を反転-何もコーティングしない
- 両方を再び反転-何もコーティングしない
- 再びトップを反転-トップパンケーキの元の底面をコーティング
プレートに触れ顔がまだシロップフリーですので、出力は次のようなものになるだろうFalse
か、と0
。
ノート
- フリップリストは任意に大きく、空にすることができます。その場合、出力は偽になります。
- プレートはシロップキャリアとして機能しますが、コーティングされているかどうかは関係ありません。(実際、フリップソリューションがプレートをコーティングするのは、接触するパンケーキフェースをコーティングする必要があるためですが、それは関係ありません。)
- プレートは反転できません。
- これらのパンケーキは、側面がなく、向かい合った2つの面のみを持つ単位ディスクであると想定できます。
得点
Put syrup on the pancakes!
;)