我的小孩有这样的玩具:
这个玩具包含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到#N,这是
N
整数列表中的最大整数。我的孩子仍然不知道零的概念。 - 您可以以任何合理的格式接收输入,只要它代表一堆桶即可。如果您更改接收输入的方式,只需在答案中指定即可。
- 这是代码高尔夫球,因此每种语言中最短的程序/功能可能会获胜!
例子
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)