追加のピラミッド与えて、それが解決できるかどうかを判断します。追加ピラミッドは、複数のレイヤーで構成され、各レイヤーはその下の数字よりも1つ小さい数字を持ちます。レイヤーはとして記号化されています。はベースレイヤーで、は上のレイヤーです。の番目の番号はとして示されます。はの左端の数で、は右側の数です。あなたが視覚化できるの上に存在するi P i P 1 P i + 1 P i j P i P i 、j P i 、1 P i P i 、j + 1 P i 、j P i + 1 、j P i 、jそしてミドル、その名"付加でピラミッド "。
- 、つまり、ピラミッド内のすべての数値はゼロ以外の正の整数です。
- 、つまり、ピラミッドのベースレイヤーにないすべての数値は、その下の2つの数字。
- 場合有するの数字、有するの番号を、従っての右端の数である。簡単に言えば、各レイヤーには、その下のレイヤーよりも1つ小さい数字があります。
また、ピラミッドパズル 、いくつかの数字との付加ピラミッドは(に置き換え削除されます)。その解決策は、追加のピラミッド。ここで、、つまり、パズルに元々存在していた数字は変更されずに残されました。このようなパズルには複数の解決策があります。
あなたの仕事は、ピラミッドパズルを追加して、それが1つのソリューションを持っているかどうかを判断することです。
入力
次のいずれかの形式で入力を取得できますが、一貫性があります。
- レイヤーの配列。
- 一貫した非正の整数値を要素間のセパレーターとして使用するピラミッド型のレイヤー(毎回1回のみ使用)、および左右のパディング。セパレータとパディングは同じでなければなりません。
- 一貫した有効な右または左のパディングを持つレイヤーの配列(この場合、一貫していて、右と左のパディングを混在させないでください)。
厳密に正の整数ではない一貫した値を使用して、欠落している数値を表す必要があることに注意してください。この値はパディングとして使用できません。また、レイヤーを連結することもできます(それらを分離することもできます)。順序は、ベースからトップ、またはトップからベースのいずれかです。
出力
2つの一貫した異なる値の1つ。1つは一意のソリューションの存在を表し、もう1つはソリューションの不在または複数のソリューションの存在を表します。
ルール
- は、場合、常に真になります。。つまり、3つの数値がすべてわかっている場合、合計ではない2つの数値の上に数値が含まれないことが保証されます。
- つまり、ピラミッドには少なくとも1つの既知の数値が含まれます。
- これらのことをしないでください。
- これはcode-golfなので、最短の答えが勝ちです!ただし、あなたの言語が「冗長すぎる」という理由だけで、ソリューションを投稿することを思いとどまらせないでください。
テストケース
ベース上から層を有する配列と、これらのテストケースに使用される0
代表しますか。
[[10], [0, 0], [0, 2, 0], [0, 0, 0, 1]] -> True
[[32], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] -> True
[[0], [1, 1]] -> True
[[1], [0, 0]] -> False
[[10], [5, 5], [2, 3, 2], [0, 0, 0, 0]] -> False
[[5], [0, 0], [0, 0, 0]] -> False
実施例
テストケースはここで機能します。
ユニークなソリューション1
ステップ1:。
ステップ2:。
ステップ3:。
ステップ4:。
手順5〜6は4と同様です。
したがって、ここに独自のソリューションがあります。
ユニークなソリューション2
ステップ1:ここには明確なアプローチはありませんので、可能な最小値を使用してみましょう。
ステップ2〜5:最小値が解をもたらすように見えるため、これが唯一の解であり、したがって一意です。
ヒント:このパズルに関連する追加のピラミッドパズルに関する定理があり、十分に考えれば証明できます。
ユニークなソリューション3
ステップ1:。
これは明らかにユニークなソリューションです。
解決策なし1
なので、解決策はありません。
解決策なし2
ステップ1-2:。
そこから、になりますが、これは矛盾であるため、解決策はありません。
一意でないソリューション
2つのソリューション:
少なくとも2つのソリューションがあるため、独自のソリューションはありません。