Fillomino é um quebra-cabeça em que você preenche uma grade com poliamino . Cada poliomino é uma área de células contíguas. A representação em grade mostra qual tamanho o polyomino está cobrindo cada célula. Por exemplo, um pentomino (5) seria mostrado como 5
em cada uma das cinco células contíguas (veja abaixo). Dois poliominoes do mesmo tamanho não podem compartilhar uma borda, mas podem bordar na diagonal.
Para cada quebra-cabeça, você começa com um número de dados e deve preencher as células restantes. Um exemplo fácil de quebra-cabeça e solução:
Sua tarefa: Dado um quebra-cabeça quadrado, resolva-o e dê a resposta. A entrada pode ser via stdin, um único argumento de linha de comando ou arquivo de texto. A entrada será fornecida como um número inteiro n
, seguida por n
linhas de n
dígitos cada. As células vazias serão fornecidas como pontos ( .
). Para o exemplo de quebra-cabeça acima, seria:
5
3..66
5.4.6
.54.6
.1.6.
..312
Saída é o quebra-cabeça resolvido, fornecido em n
linhas de n
dígitos, para console ou arquivo de texto:
33366
55446
55466
51462
33312
Se o quebra-cabeça não for válido, produza 0
. Um quebra-cabeça pode ser inválido se a entrada estiver malformada ou se não houver solução. Se houver várias soluções, você poderá gerar uma ou todas elas.
Como cada célula é representada por um único dígito, todos os quebra-cabeças consistirão no tamanho 9
e no tamanho de polioaminoes . Se não for possível resolver sem poliomatinos maiores, considere-o inválido.
Respostas válidas resolverão qualquer quebra-cabeça, não apenas soluções de saída para casos de teste. Nenhum recurso externo, seja online ou local. Se não acontece para ser uma linguagem com um built-in função fillomino problemas, você não pode usá-lo. Em suma, jogue limpo .
Caso de teste:
Entrada:
9
..21.3..5
.5...5..5
.1.44.334
...53.4..
2.3.3..5.
1.15.5.15
..45..1..
.24.53.53
....2....
Saída (uma solução possível):
322133315
355445555
315443334
235531444
233135551
141535515
344553155
324553553
321223133
Lembre-se de que alguns poliomatinos não têm números determinados e alguns têm mais de um. Há não uma relação de um-para-um entre o número de Givens e o número de poliominós.
Pontuação é código-golfe padrão, tamanho do programa em bytes.
fonte
Respostas:
4882 caracteres - Java
Não é uma solução muito golfe (ou seja, 4800 caracteres é um lotttttttttttt). Poderia ser um pouco mais jogado porque 1 ou 2 linhas de impressão de depuração ainda estão lá. Acho que posso reduzir um pouco ainda em termos de código inútil / otimizado.
Como nunca vi Polyominoes antes disso, li o que são e, sem olhar para resolver os alrogitmos, acabei inventando os meus (bem devagar).
Basicamente, usa muito a recursão ... Encontra um Polyomino incompleto, tenta concluí-lo. Encontra um espaço vazio, dá laços de 1 a 9 por todos os quadrados no bolso e define esse bolso para esse valor. Se o bolso estiver completo, ele tenta encontrar outro bolso e depois repete até terminar. Não consegui fazê-lo funcionar para uma grade de tamanho 9 ... Tenho pelo menos uma otimização em mente que poderia fazê-lo funcionar dentro de um tempo razoável para 9. Talvez tente colocar isso em breve.
fonte