Às vezes, quando estou rabiscando, desenho um retângulo, começo com uma diagonal de um dos cantos e, em seguida, trace uma linha "refletindo" toda vez que bato em um lado do retângulo. Eu continuo com isso até atingir outro canto do retângulo (e espero que a proporção do meu retângulo não seja irracional;)). É como traçar o caminho de um laser que brilha dentro de uma caixa. Você deve produzir o resultado disso com a arte ASCII.
Como exemplo, considere uma caixa de largura 5
e altura 3
. Sempre começaremos no canto superior esquerdo. Os #
marca o limite da caixa. Observe que a largura e a altura se referem às dimensões internas.
####### ####### ####### ####### ####### ####### #######
#\ # #\ # #\ \# #\ /\# #\ /\# #\/ /\# #\/\/\#
# \ # # \ /# # \ /# # \/ /# # \/ /# #/\/ /# #/\/\/#
# \ # # \/ # # \/ # # /\/ # #\/\/ # #\/\/ # #\/\/\#
####### ####### ####### ####### ####### ####### #######
O desafio
Dada a largura (positiva) e a altura da caixa, você deve produzir o resultado final da localização do laser. Você pode escrever um programa ou função, recebendo entradas via STDIN (ou alternativa mais próxima), argumento de linha de comando, argumento de função e gerar o resultado via STDOUT (ou alternativa mais próxima) ou através de valores ou argumentos de retorno de função.
Você pode usar qualquer formato conveniente de lista, sequência ou número para entrada. A saída deve ser uma única string (a menos que você a imprima em STDOUT, o que você pode fazer gradualmente). Isso também significa que você pode obter a altura primeiro e a largura segundo - basta especificar o formato exato de entrada na sua resposta.
Não deve haver espaços em branco à esquerda nem à direita em nenhuma linha da saída. Opcionalmente, você pode gerar uma única nova linha à direita.
Você deve usar o espaço, /
, \
e #
e reproduzir os casos de teste exatamente como mostrado.
Casos de teste
2 2
####
#\ #
# \#
####
3 2
#####
#\/\#
#/\/#
#####
6 3
########
#\ /#
# \ / #
# \/ #
########
7 1
#########
#\/\/\/\#
#########
1 3
###
#\#
#/#
#\#
###
7 5
#########
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#/\/\/\/#
#\/\/\/\#
#########
22 6
########################
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
# /\ /\ /\ /\ /\ /#
#/ \/ \/ \/ \/ \/ #
#\ /\ /\ /\ /\ /\ #
# \/ \/ \/ \/ \/ \#
########################
X
seriam necessários para cruzamentos. Talvez na próxima vez. ;)