Você deve escrever um programa ou função que receba uma string descrevendo o piso como entrada e saída ou retorne a área da meta-telha mais simples que possa criar o padrão especificado do piso.
O piso faz parte de uma grade quadrada. Cada bloco quadrado é colorido em azul ou preto (representado por a
e b
na entrada).
Um exemplo de andar:
aaaa
ababab
aaaaa
Um meta-lado a lado
- é construído a partir de um
N
porM
rectangular meta-telha de quadrados azuis e pretos - os meta-mosaicos usados são idênticos até a tradução (você não pode girá-los ou espelhá-los)
- se os lados de dois meta-mosaicos estiverem conectados, eles deverão se conectar ao longo de todo o seu comprimento (ou seja, os meta-mosaicos dividirão o espaço de maneira semelhante a uma grade)
Um exemplo de meta-bloco:
ba
aa
e o meta-lado a lado criado por ele:
.
.
.
babababa
aaaaaaaa
... babababa ...
aaaaaaaa
babababa
aaaaaaaa
.
.
.
Essa meta-lado a lado cria o piso superior mostrado, como mostram as letras à esquerda:
.
.
.
********
***aaaa*
... *ababab* ...
*aaaaa**
********
********
.
.
.
Um meta-lado a lado é mais simples que outro se a área do seu lado a lado for menor. Nosso exemplo tem uma área 2*2 = 4
que é a menor possível para o piso de exemplo. Portanto, a saída deve ser 4
por exemplo.
Entrada
- Uma sequência que consiste nos caracteres
a b space
e quenewline
contém pelo menos uma
oub
. - As letras (
ab
) formam um formato de 4 conexões (lado a lado). - Não haverá espaços desnecessários na frente das linhas, ou seja, haverá pelo menos uma linha começando com
a
oub
. Você pode escolher entre dois formatos de entrada:
- Não há espaço em branco desnecessário no final das linhas (como visto nos exemplos).
- Espaços no lado direito das linhas para tornar todas as linhas do mesmo comprimento que a linha mais longa.
A nova linha à direita é opcional.
Resultado
- Um único inteiro, a área do menor meta-mosaico possível cujo mosaico contém o piso de entrada.
Exemplos
Os exemplos são delimitados por traços. As três partes de um exemplo são entrada, saída e um dos menores meta-blocos possíveis.
a
1
a
-----------------
aaaa
aaa
a
1
a
-----------------
aabaab
abaa
aaba
6
aab
aba
-----------------
aabaab
a a a
aabab
18
aabaab
aaaaaa
aababa
-----------------
ba
aaab
8
baaa
aaab
-----------------
aaaa
ababb
aaaa
10
aaaaa
ababb
-----------------
a aa
ab ba
aba
6
aa
ab
ba
-----------------
aaaa
abab
aaaa
4
aa
ab
-----------------
ba
ba
b
4
ba
ab
-----------------
baa
aba
aab
9
baa
aba
aab
-----------------
aaaa
aabaa
aaaa
6
aaa
aab
Este é um código de golfe, portanto a entrada mais curta vence.
Respostas:
C - 208 bytes
Código equivalente antes do golfe:
O algoritmo é uma força bastante bruta, portanto deve ser razoavelmente óbvio como ele funciona com base no código. Aqui estão alguns comentários de qualquer maneira:
q
. Sai com areturn
quando um meta-bloco pode cobrir o chão. Observe que o loop não precisa de outra condição de saída, pois sempre existe uma solução (o pior caso é o tamanho da entrada).if
enumeram combinações válidas de largura / altura do meta-bloco para tamanhoq
.u
é o índice no meta-bloco que corresponde ao piso.a
oub
diferentes (soma dea = 97
eb = 98
é195
), há uma incompatibilidade e o tamanho do meta-ladrilho com as dimensões tentadas não funcionará.a
oub
, a cor do mosaico será copiada para o meta-mosaico candidato.Código de teste usado:
Resultado:
fonte