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 polxe 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
Ds:\ \ ---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á.