Meu filho pequeno tem um brinquedo como este:
Este brinquedo consiste em 10 pequenos baldes empilháveis, que vamos numerar de 1 (o menor) a 10 (o maior). Às vezes, ele faz pequenas pilhas e o brinquedo acaba assim:
Podemos representar esquematicamente as pilhas assim:
1 6
4 9 2 7
5 10 3 8
---------- <-- Floor
1 2 3 4 <-- Pile #
Ou, de outra forma:
[[4,5],[9,10],[1,2,3],[6,7,8]]
Esse conjunto de pilhas de baldes é facilmente reembalável para reconstruir o conjunto original (a primeira imagem) apenas colocando consecutivamente pilhas de baldes menores dentro de pilhas de baldes maiores:
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
No entanto, às vezes meu filho tenta construir torres ou joga baldes fora, e as pilhas acabam sendo inconsistentes e o conjunto original não pode ser reconstruído apenas colocando uma pilha dentro da outra. Exemplos disso:
[[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)
Desafio
Dada uma lista de listas de números inteiros que representam um conjunto de pilhas do balde, retorne um valor verdadeiro se as listas representarem um conjunto de pilhas facilmente reorganizáveis ou falsey em qualquer outro caso.
- A entrada será fornecida como uma lista de listas de números inteiros, representando os buckets de cima para baixo para cada pilha.
- Não haverá pilhas iniciais vazias (você não receberá
[[1,2,3],[],[4,5]]
como entrada). - O número total de buckets pode estar dentro de um intervalo inteiro razoável.
- Meu filho tem apenas um conjunto de baldes para que não haja elementos duplicados.
- Você pode selecionar quaisquer dois valores consistentes (e coerentes) para verdade ou falsidade.
- Os buckets serão rotulados de # 1 a #N, sendo
N
o maior número inteiro nas listas de números inteiros. Meu filho ainda não conhece o conceito de zero. - Você pode receber a entrada em qualquer formato razoável, desde que represente um conjunto de pilhas de baldes. Apenas especifique-o na sua resposta se você alterar a maneira como recebe a entrada.
- Isso é código-golfe , portanto, pode ganhar o programa / função mais curto para cada idioma!
Exemplos
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)