No meu desafio anterior , desenhei o primeiro diagrama principalmente à mão (com a ajuda do modo de bloqueio visual do vim). Mas certamente deve haver uma maneira melhor ...
Dada uma entrada de duas dimensões, uma largura e uma altura, produz uma grade hexagonal com essas dimensões na arte ASCII.
Aqui está o diagrama mencionado na introdução (com edições menores), que deve ser sua saída para a entrada width=7, height=3
:
_____ _____ _____
/ \ / \ / \
_____/ -2,-1 \_____/ 0,-1 \_____/ 2,-1 \_____
/ \ / \ / \ / \
/ -3,-1 \_____/ -1,-1 \_____/ 1,-1 \_____/ 3,-1 \
\ / \ / \ / \ /
\_____/ -2,0 \_____/ 0,0 \_____/ 2,0 \_____/
/ \ / \ / \ / \
/ -3,0 \_____/ -1,0 \_____/ 1,0 \_____/ 3,0 \
\ / \ / \ / \ /
\_____/ -2,1 \_____/ 0,1 \_____/ 2,1 \_____/
/ \ / \ / \ / \
/ -3,1 \_____/ -1,1 \_____/ 1,1 \_____/ 3,1 \
\ / \ / \ / \ /
\_____/ \_____/ \_____/ \_____/
Observe várias coisas:
A largura e a altura são essencialmente equivalentes a quantos hexágonos existem para uma dada coordenada y e x, respectivamente. Estes sempre serão números ímpares.
Cada hexágono é representado pela arte ASCII
_____ / \ / \ \ / \_____/
mas as fronteiras são "compartilhadas" entre hexágonos vizinhos.
A vírgula nas coordenadas é sempre exatamente dois caracteres abaixo do centro da borda superior. A coordenada x é então posicionada diretamente antes da vírgula e a coordenada y diretamente depois.
Você pode afirmar que as coordenadas nunca serão muito grandes, de modo que se sobreponham às bordas do hexágono.
A entrada pode ser tomada como uma cadeia de caracteres separada por espaço em branco / vírgula, uma matriz de números inteiros ou dois argumentos de função / linha de comando. A saída deve ser uma única sequência (para STDOUT, como um valor de retorno, etc.).
Como esse é o código-golfe , o código mais curto em bytes será vencedor.
A grade acima pode ser usada como um caso de teste. A width=199, height=199
grade de tamanho máximo
é obviamente impraticável para incluir aqui, mas as primeiras linhas e colunas devem ter a seguinte aparência:
_____ ___
/ \ /
_____/-98,-99\_____/-96,
/ \ / \
/-99,-99\_____/-97,-99\___
\ / \ /
\_____/-98,-98\_____/-96,
/ \ / \
/-99,-98\_____/-97,-98\___
\ / \ /
\_____/-98,-97\_____/-96,
/ \ / \
/-99,-97\_____/-97,-97\___
\ / \ /
fonte
Respostas:
Ruby, 221 bytes
Ungolfed in program program
Resultado
Quando estava terminando a depuração, notei uma ambiguidade na especificação. Onde
w+1
é divisível por 4, a primeira e a última coordenadas x são ímpares e não há ambiguidade. Mas ondew-1
é divisível por 4, a primeira e a última coordenadas x são pares. Assumi que a primeira e a última colunas deveriam ser deslocadas abaixo das próximas. Mas então eu li a pergunta anterior e notei que, nesse caso, eram as colunas ímpares que deveriam ser deslocadas abaixo das pares (nota paraw-1
divisível por 4, não é possível fazer as duas coisas).Essa distinção não foi feita nesta questão, no entanto. Deixarei isso para o julgamento do OP e retrabalho, se necessário, embora prefira não precisar.
fonte