Este desafio é inspirado por este aplicativo .
Esta é uma versão muito mais fácil deste desafio . Esse desafio é o código-golfe , enquanto o outro é o código mais rápido .
Você receberá uma grade quadrada de entrada, das dimensões 6 por 6, que é dividida em 6 áreas, onde as células de cada área têm um identificador exclusivo (usarei letras minúsculas de af no texto aqui, mas você pode escolher o que quiser, por exemplo, números inteiros 1 a 6 ).
A entrada pode ser assim (formato de entrada opcional):
aabbbb
aabbbb
aaccbb
acccdb
ecccdb
eeefff
Ou, mais fácil de visualizar:
Desafio:
Você deve colocar 6 árvores neste parque, de acordo com as seguintes regras:
- Deve haver exatamente 1 árvore por coluna e 1 árvore por linha
- Todas as áreas devem ter exatamente 1 árvore.
- Nenhuma árvore pode estar adjacente a outra árvore, vertical, horizontal ou diagonal
A solução para o layout acima é:
Nota: Existe apenas uma solução para cada quebra-cabeça
Regras adicionais:
- Os formatos de entrada e saída são opcionais
- A saída pode, por exemplo, ser uma lista de índices, uma grade com 1/0 indicando se há uma árvore nessa posição ou uma versão modificada da entrada em que as árvores são indicadas
- O tempo de execução deve ser determinístico
- O programa deve terminar em 1 minuto em um laptop moderno e razoável
- Brownie aponta se você não força bruta!
Casos de teste:
aabbbb
aabbbb
aaccbb
acccdb
ecccdb
eeefff
---
aAbbbb
aabbbB
aaCcbb
acccDb
Ecccdb
eeeFff
----------
aabccc
aacccc
aaddce
aeeeee
aeeefe
eeeeee
---
aaBccc
aacccC
aadDce
Aeeeee
aeeeFe
eEeeee
----------
aaaabb
aacbbb
aadddb
addeef
ddddee
dddeee
---
aaaaBb
aaCbbb
Aadddb
addeeF
dDddee
dddEee
----------
abbbcd
abebcd
addddd
dddddd
effdff
eeffff
---
abBbcd
abebCd
Addddd
dddDdd
effdfF
eEffff
Os mesmos casos de teste em um formato um pouco mais fácil de analisar:
Test case 1:
[1,1,2,2,2,2;1,1,2,2,2,2;1,1,3,3,2,2;1,3,3,3,4,2;5,3,3,3,4,2;5,5,5,6,6,6]
Test case 2:
[1,1,2,3,3,3;1,1,3,3,3,3;1,1,4,4,3,5;1,5,5,5,5,5;1,5,5,5,6,5;5,5,5,5,5,5]
Test case 3:
[1,1,1,1,2,2;1,1,3,2,2,2;1,1,4,4,4,2;1,4,4,5,5,6;4,4,4,4,5,5;4,4,4,5,5,5]
Test case 4:
[1,2,2,2,3,4;1,2,5,2,3,4;1,4,4,4,4,4;4,4,4,4,4,4;5,6,6,4,6,6;5,5,6,6,6,6]
Respostas:
C,
223182 bytesRecebe entrada como argumento no formato fornecido na pergunta. Grava a saída em stdout como uma grade de 0s com 1s para onde as árvores vão.
Saída de amostra:
Demolir
É uma adaptação da minha resposta para a versão de código mais rápido desta pergunta . Não tem tanto curto-circuito, mas é rápido o suficiente para grades 6x6.
fonte
Clingo , 66 bytes
Corra com
clingo plant.lp - -c n=<n>
onde<n>
está o tamanho da grade. O formato de entrada é uma lista dec(X,Y,Z).
instruções para cada célula (X
,Y
) coloridoZ
, com uma ≤X
,Y
,Z
≤n
, separados por espaços em branco opcional. A saída incluit(X,Y)
para cada árvore em (X
,Y
).Demo
Para facilitar o tratamento do formato de entrada / saída, aqui estão os programas Python para converter de e para o formato indicado no desafio.
Entrada
Resultado
fonte