Aqui está um diagrama de uma prisão usando caracteres ASCII:
+------------------------------+
| |
| X X |
| |
| D
D |
| |
| |
| X X X |
| |
+------------------------------+
As paredes são feitas de caracteres de tubulação |
, traços -
e pilares +
para cantos e cruzamentos. Há também duas portas marcadas com D
(que sempre estarão nas paredes esquerda e direita). A prisão está cheia de pessoas assustadoras marcadas com X
.
O objetivo é construir paredes para satisfazer o seguinte:
- Cada pessoa está em confinamento solitário;
- Há um corredor correndo entre as duas portas;
- Cada célula contém exatamente uma porta, que está diretamente conectada ao corredor principal;
- Todo o espaço na prisão é usado pelas celas e pelo corredor;
- Cada célula contém uma pessoa (ou seja, não há células vazias).
O corredor é um caminho único, não se ramifica e sempre tem um caractere de largura. Aqui está uma solução para a prisão acima:
+---------+--------------------+
| | |
| X | X |
| | +--------+
+------D--+-----D-----+ D
D +---D--+
+----D--------+---D-----+ |
| | | |
| X | X |X |
| | | |
+-------------+---------+------+
Você pode assumir que qualquer prisão de entrada sempre terá uma saída válida. Aqui estão mais algumas prisões de entrada, juntamente com possíveis saídas:
+------------------------------+
|X X X X X X X X X X X X X X X |
| |
D D
| |
| X |
+------------------------------+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+
|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X |
+D+D+D+D+D+D+D+D+D+D+D+D+D+D+D-+
D D
+----------------------D-------+
| X |
+------------------------------+
+-----------+
|X |
| |
| |
|X X|
| |
| X|
| |
D D
+-----------+
+-+-------+-+
|X| D |
| D +---+ | |
+-+ | | |
|X| | +---+X|
| | | | +-+
| D | | X|
+-+ | +-D---+
D | D
+---+-------+
+----------------+
|X X X X|
| |
D |
| |
|X X X |
| |
| |
| |
| X X D
| |
| |
+----------------+
+---+---+----+---+
|X | X | X | X|
+--D+--D+---D+--D+
D |
+---+---+------+ |
|X | X | X | |
+--D+--D+---D--+ |
| |
| +-----+------+-+
| | X | X | D
| +----D+---D--+ |
| |
+----------------+
Respostas:
Python 2 ,
2986288129492135207520711996 bytesExperimente online!
Foi jogado para baixo significativamente; ainda pode haver espaço para melhorias. Este pedaço de código, no entanto, resolve todos os casos de teste. Não roda muito eficientemente; para grandes prisões, o arquiteto pode demorar um pouco para descobrir isso.
Utiliza um algoritmo simples de busca de caminhos para conectar portas e prisioneiros ao corredor. Em seguida, encapsula todos os prisioneiros e suas paredes e empurra essas paredes no espaço vazio até que tudo esteja cheio. Como etapa final, a aparência da arte ASCII é implementada.
Levei várias horas para escrever. Espero que também funcione em outras prisões além dos casos de teste. (Você não pode testar todos eles, pode?)
fonte
P
). Este não é um formato de E / S permitido. Você deve usarinput()
ou definir uma função.C,
37323642 bytesDefinitivamente, eu poderia jogar isso um pouco mais, mas é um bom começo. Inicialmente, eu não sabia que minha abordagem tinha um nome; então, grite ao @TehPers por me dar um nome para pesquisar. Eu definitivamente gostei do desafio que essa pergunta ofereceu. :)
-63 bytes das sugestões de @ Jonathan. Eu também substituído
char
comtypedef char R
e substituídos todos os literais de caracteres que são menores do que 100 com seus valores ASCII para um total de 90 bytesUma rápida explicação do meu código.
Para usar este programa, passe o mapa como uma sequência com caracteres de nova linha ou com cada nível separado por um espaço, como no exemplo a seguir.
código
fonte
free(t);free(u);
no final do seu programa. Além disso,'\0'
é igual a0
, economizando outros 3 bytes.typedef int Q;
e substituir todas as ocorrênciasint
comQ
, você poderia economizar mais 44 bytes.