Vamos representar um tijolo de alvenaria padrão como [__]
(e ignorar o fato de que a parte superior está aberta). Quando esses tijolos são empilhados, todas as outras camadas são compensadas por meio tijolo, como é habitual na construção de tijolos:
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
Assim, cada tijolo tem no máximo seis vizinhos e é impossível que dois tijolos se alinhem diretamente na vertical.
O ponto principal é que os arranjos desses tijolos não são argamassados , mas apenas mantidos juntos pela gravidade. Portanto, é importante que cada tijolo na estrutura seja estável, caso contrário, toda a estrutura é instável.
Existem três maneiras pelas quais um tijolo individual pode ser estável:
- Qualquer tijolo no chão (a linha mais baixa de tijolos) é estável.
Qualquer tijolo que tenha dois tijolos diretamente abaixo é estável:
[__] <- this brick is stable [__][__] <- because these bricks hold it up
Qualquer tijolo que tenha um tijolo acima e abaixo do mesmo lado é estável:
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
A partir dessas regras, podemos ver, por exemplo, o arranjo
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
é instável porque o tijolo superior direito é instável, o que é suficiente.
Uma estrutura de tijolos é estável apenas se todos os seus tijolos forem estáveis.
Desafio
Sua tarefa é escrever uma função que receba uma sequência de estrutura de tijolo e retorne um valor verdadeiro, se a estrutura for estável, e um valor falso, se instável. ( definição de verdade / falsidade )
A sequência de entrada pode ser arbitrariamente grande, mas sempre será uma grade retangular de caracteres, com espaços preenchendo áreas sem tijolos. A largura da grade de caracteres será divisível por 4, mas a altura pode ser ímpar ou par.
A grade do tijolo sempre se estende acima e à direita da posição inferior esquerda do tijolo:
.
.
.
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK? . . .
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
Dependendo da estrutura, cada BRK?
um representa um tijolo ( [__]
) ou um espaço vazio (4 espaços).
Observe que as cavidades de meio tijolo são preenchidas com espaços para garantir que a grade de caracteres seja retangular.
Pontuação
O código mais curto em bytes vence.
Notas
- Se desejar, você pode usar em
.
vez do espaço como o caractere de espaço vazio. - A cadeia vazia é considerada estável.
- Se seu idioma não possui funções, você pode usar uma variável de string nomeada como entrada e atribuir o resultado a outra variável.
- Se o seu idioma não tiver strings, você poderá fazer o que parecer apropriado para a entrada.
Casos de teste
Vários casos de teste, separados por linhas vazias. Para maior clareza, .
é usado em vez de espaço para espaços vazios.
Estável:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
Instável:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__]....
......[__][__]..
....[__][__]....
..[__][__]......
[__][__]........
..[__]..........
(você terá que empilhar mentalmente essas linhas umas sobre as outras. O ponto é que suas regras permitem estruturas cujo centro de gravidade está muito distante do ponto de contato com o solo. Deve ser possível apertá-las para evitar isso. , sem precisar de um motor de física, se você sentiu como ele).