Qualquer hexágono comum pode ser lado a lado com diamantes, por exemplo, assim (roubado desta pergunta ):
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Consideraremos o tamanho acima como um ladrilho do tamanho 1 (já que os lados dos diamantes são feitos de um / ou \ cada). O mesmo lado a lado do tamanho 2 seria semelhante a:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Sua tarefa é girar as inclinações de diamante em um múltiplo de 60 graus. O mosaico de diamantes na entrada pode ter qualquer tamanho (e o tamanho não está especificado explicitamente na entrada). Mas sempre seria um ladrilho válido e todos os lados do hexágono teriam o mesmo comprimento.
Estes são os exemplos acima girados 60 graus no sentido horário:
______
/_/\_\_\
/\_\/_/\_\
/\/_/\_\/_/\
\/\_\/_/_/\/
\/_/\_\_\/
\_\/_/_/
____________
/ /\ \ \
/___/ \___\___\
/\ \ / /\ \
/ \___\/___/ \___\
/\ / /\ \ / /\
/ \/___/ \___\/___/ \
\ /\ \ / / /\ /
\/ \___\/___/___/ \/
\ / /\ \ \ /
\/___/ \___\___\/
\ \ / / /
\___\/___/___/
A entrada é um número inteiro não negativo e um mosaico de diamantes. Seu programa (ou função) deve girá-lo pelo número inteiro * 60 graus. Você decide se gira no sentido horário ou anti-horário, desde que seja consistente. Tanto a entrada como a saída não devem ter espaços iniciais ou finais extras.
Isso é código-golfe. O menor código vence.
Perguntas relacionadas:
fonte
Respostas:
Pitão, 81 bytes
Experimente online
Gira no sentido anti-horário.
Cada rotação de 60 ° é realizada usando o seguinte algoritmo. Suponha que a entrada seja um hexágono da ordem k , portanto, possui 2⋅ k + 1 linhas e 4⋅ k colunas. Para encontrar o caractere girado na linha i coluna j , deixe
Então o caractere de saída é
\
, se a entrada tiver/
na linha ( u + 1) / 2 coluna ( v + 1) / 2; outro/
, se a entrada tiver_
na linha u / 2 coluna v / 2 ou linha u / 2 coluna ( v + 2) / 2; outro_
, se a entrada tiver\
na linha ( u + 2) / 2 coluna v / 2 ou na linha ( u + 1) / 2 coluna ( v - 1) / 2; outro(Não contamos caracteres com índices de meio inteiro.)
fonte
\
s, são apenas as_
que você precisa verificar nos dois lugares.\
estão, mas pode ter que desenhar dois_
para cada um\
.JavaScript (ES6),
452356315 bytesOnde
\n
representa o caractere literal de nova linha. Edit: Salvo 96 bytes, percebendo que o meu algoritmo não precisa saber o número e tamanho dos diamantes separadamente, além de alguns pequenos golfinhos que eu perdi na primeira vez. Economizei 41 bytes reorganizando o código para que o destino fosse sempre o mesmo par de caracteres, além de um pequeno golfe que eu perdi ao converter para o meu algoritmo anterior.Mostrar snippet de código
Explicação: Considera cada par de caracteres de saída, o que poderia ser
__
,/_
,_\
,/
ou\
, para verificar os caracteres apropriados na entrada que mapeiam para esses caracteres de saída. Ungolfed:fonte