As maçanetas são ótimas e tudo, mas quando você abre uma porta, ela sempre amolga as paredes ao seu redor. Eu preciso que você entenda a arte ASCII de uma sala, assim:
+---------+--X --X --+-----+
| \ \ |\ | \ |
| \ \ | \ | \|
| X | \ | X
| / | | \ X
| / | \ /
| / | \ / |
+---X --+-------X------+-----+
E produza a sala com batentes de porta, como este:
+---------+--X --X --+-----+
| \ . \ |\ | \.|
| \ \ | \ .| \|
| X | \ | X
| / | |. \ X
| / .| \ /
|. / | .\ / |
+---X --+-------X------+-----+
Especificação:
- O quarto ASCII (entrada) vai consistir em
+
,-
e|
. Esses personagens são puramente cosméticos; todos poderiam ser+
s, mas isso pareceria horrível. Também conterá dobradiças (X
) e portas (/
ou\
). - As portas são compostas por
/
ou\
. A partir do caractere "dobradiça", ou sejaX
, eles irão diretamente na diagonal (alteração de 1 polx
e 1 poly
) por 2 ou mais unidades (caracteres). Para descobrir onde colocar o batente da porta (sempre há apenas um batente por porta), encontre a porta da porta. A porta sempre começa com uma dobradiça e tem a mesma quantidade de espaços que o comprimento da porta para cima, baixo, esquerda ou direita a partir daí. O próximo espaço depois disso sempre será uma parede. Por exemplo, nesta porta, a porta é marcada por
D
s:\ \ ---DDX-----
Quando a porta for encontrada, descubra se você precisa ir no sentido horário ou anti-horário para chegar à porta. Por exemplo, nesse exemplo da porta acima, você deve ir no sentido horário e, neste, deve ir no sentido anti-horário:
\ <- \ ) -----X ---
Depois de saber qual caminho seguir, continue por esse caminho (ignorando a porta) até chegar a uma parede.
Aqui está uma visualização disso para a porta de exemplo acima:
O azul é a porta, o laranja descobre que você deve ir no sentido horário e o vermelho continua no sentido horário até que uma parede seja atingida.
Quando chegar a uma parede, vá (o comprimento da porta) para os espaços da dobradiça (
X
) nessa parede, afaste um espaço da parede em direção à porta (para não colocar o batente da porta na parede) e insira um.
há. Aqui está o mesmo exemplo de porta mostrando como o batente da porta é colocado:\ \ . ---DDX12---
Repita para cada porta e produza o resultado! Use o exemplo de entrada na parte superior desta postagem como um caso de teste para verificar se seu programa é válido.
Observe que você não precisa lidar com portas que não se encaixam nas paredes, como:
| / | / | / | / +-X --
Ou:
/ / / +-X -- | |
- Isso é código-golfe , então o código mais curto em bytes vencerá.