私の小さな子供はこのようなおもちゃを持っています:
このおもちゃは10個の積み重ね可能な小さなバケツで構成され、1(最小のもの)から10(最大のもの)まで番号を付けます。時々彼は小さな山を作り、おもちゃはこのようになります:
このように山を概略的に表すことができます:
1 6
4 9 2 7
5 10 3 8
---------- <-- Floor
1 2 3 4 <-- Pile #
または、別の言い方をすれば:
[[4,5],[9,10],[1,2,3],[6,7,8]]
このバケットパイルのセットは、大きなバケットのパイル内に小さなバケットのパイルを連続して配置するだけで、元のセット(最初のイメージ)を再構築するために簡単に再スタックできます。
1 1 6
2 2 7
1 6 3 6 3 8
4 9 2 7 4 9 7 4 9
5 10 3 8 5 10 8 5 10
---------- > [Pile 3 to 1] > ---------- > [Pile 4 to 2] > ---------- > [Pile 1 to 2] > Done!
1 2 3 4 1 2 3 4 1 2 3 4
それにもかかわらず、時々私の子供は塔を建てようとするか、バケツを捨てます。そして、パイルは一貫性がなくなり、パイルを別のパイルの中に置くだけでは元のセットを再構築できません。この例:
[[1,3,2],[4]] (the kid tried to build a tower by placing a bigger bucket
over a smaller one, we would need to reorder the buckets
first)
[[1,3,4],[2]] (the kid left aside an unordered bucket, we would need to remove
bucket #1 from pile #1 before restacking)
[[1,2,3],[5]] (the kid lost a bucket, we need to find it first)
チャレンジ
バケットパイルのセットを表す整数のリストのリストが与えられた場合、リストが簡単に再スタック可能なパイルのセットを表す場合は真の値を返し、それ以外の場合は偽を返します。
- 入力は整数のリストのリストとして与えられ、各スタックのバケットを上から下に表します。
- 空の開始パイルはありません(
[[1,2,3],[],[4,5]]
入力として取得できません)。 - バケットの総数は、合理的な整数範囲内であればどれでもかまいません。
- 私の子供にはバケットのセットが1つしかないので、要素が重複することはありません。
- 真実か偽かの2つの一貫した(一貫した)値を選択できます。
- バケットには#1から#Nのラベルが付けられ
N
、整数のリストの最大の整数になります。私の子供はまだゼロの概念を知りません。 - バケットの山のセットを表す限り、任意の妥当な形式で入力を受け取ることができます。入力を受け取る方法を変更する場合は、回答で指定するだけです。
- これはcode-golfなので、各言語の最短のプログラム/機能が勝つかもしれません!
例
Input: [[4,5],[9,10],[1,2,3],[6,7,8]]
Output: Truthy
Input: [[6,7,8,9,10],[1],[2],[3,4,5],[11,12,13]]
Output: Truthy
Input: [[2,3,4],[1],[5,6,7]]
Output: Truthy
Input: [[1,2],[5,6],[7,8,9]]
Output: Falsey (buckets #3 and #4 are missing)
Input: [[2,3,4],[5,6,7]]
Output: Falsey (bucket #1 is missing)
Input: [[1,3,4],[5,7],[2,6]]
Output: Falsey (non-restackable piles)
Input: [[1,4,3],[2],[5,6]]
Output: Falsey (one of the piles is a tower)