Saída de um "splat" ASCII

10

Se você jogar um ovo ASCII em uma determinada direção, terá um splat ASCII de tamanho n . Ele "começa" com uma o(a gema) e continua em uma determinada direção com "linhas" consistindo em 2 até n * 's. Os *são separados por um "espaço", e as oe todas as "linhas" de *são separadas por "linhas" de "espaço".

A direção da splat pode ser qualquer uma das oito direções o, por exemplo:

1 2 3
4 o 5
6 7 8

Estes são exemplos de splats ASCII de tamanho 4 em direcções 5, 2e 3respectivamente. À esquerda está o splat ASCII real, e à direita é o mesmo splat, mas com as "linhas" do "espaço" substituídas por "linhas" reais ( -ou seja, \ou |dependendo da direção) apenas para esclarecer o que se entende por um "linha" de espaço.

Size 4, direction 5
      *      | | |*
    *        | |*| 
  *   *      |*| |*
o   *       o| |*| 
  *   *      |*| |*
    *        | |*| 
      *      | | |*

Size 4, direction 2
* * * *     * * * *
            -------
 * * *       * * *
            -------
  * *         * *
            -------
   o           o

Size 4, direction 3   
*           *      
            \
* *         *\*    
            \ \
* * *       *\*\*
            \ \ \ 
o * * *     o\*\*\*

Desafio

Dado n ≥ 1 e uma das 8 direções possíveis, escreva uma função ou programa que produza o splat ASCII de tamanho n na direção especificada.

Entrada e saída

Qualquer formato de entrada consistente e razoável é permitido. Você não precisa mapear as direções para os números inteiros 1 a 8 da mesma maneira que eu fiz - se alguma outra maneira de especificar a direção for mais fácil, vá em frente. Mas diga o que você fez se não estiver claro.

A saída consistirá em o, *espaços (U + 0020) e novas linhas (U + 000A) que produzem o splat ASCII. Espaços em branco à esquerda, à direita e à esquerda são permitidos em qualquer linha.

Regras

Isso é . Aplicam-se regras padrão.

Mais exemplos

Size 1, any direction
o

Size 3, direction 6
* * o

  * *

    *

Size 5, direction 7
    o    

   * *

  * * *

 * * * *

* * * * *
ngm
fonte

Respostas:

3

Carvão , 20 18 bytes

↘EN×*⊕ιM↗oUE¬﹪η²⟲η

Experimente online! Link é a versão detalhada do código. Explicação:

↘EN×*⊕ι

Desenhe um triângulo diagonal de splats.

M↗o

Coloque o ovo.

UE¬﹪η²

Para rotações uniformes, expanda o splat horizontalmente para corresponder ao requisito de saída. Esse requisito não corresponde às expectativas usuais do carvão vegetal. Experimente online! (detalhado) para como fica sem.

⟲η

Gire a splat conforme necessário, usando o seguinte código para obter instruções:

321
4o0
567

Esta versão de 37 bytes de 31 bytes evita espaços em branco estranhos girando apenas em ângulos retos:

¿﹪η²G↘←θ*«↘Eθ×*⊕ι↗»oUE¹﹪η²⟲⊗÷η²

Experimente online! Link é a versão detalhada do código.

Neil
fonte
2

Geléia , 37 bytes

”*ẋK¥ⱮmṠ©}”oḷ""LḶ⁶ẋƲ;"ṚƊ®¡z⁶K€ZU$A}¡Y

Experimente online!

Instruções:

[1 12345678][-21 1-342-1 13-4]

Erik, o Outgolfer
fonte
1

Python 2 , 185 bytes

lambda n,d:'\n'.join(g([(d/4*(n+~j)*' '+('*o'[[j>n-2,j<1][d/4]]+' *'*j)*i).ljust(2*n-1)for j in range(n)for i in(0,1)][1:],d%4))
g=lambda a,n:n and g(map(''.join,zip(*a))[::-1],n-1)or a

Experimente online!

A numeração é de 0 a 7, da seguinte maneira:

1 6 0
7 o 5
2 4 3

Notas: A maior parte do trabalho é gerar os padrões básicos para (no meu sistema de numeração) 0e 4. Em seguida, a função ggira a matriz a90 graus d%4vezes por recursão para gerar os outros resultados.

Chas Brown
fonte