Sortie d'un «splat» ASCII

10

Si vous jetez un œuf ASCII dans une direction donnée, vous vous retrouvez avec un splat ASCII de taille n . Il "commence" par un o(le jaune) et continue dans une direction donnée avec des "lignes" composées de 2 à n * . Les *'sont séparés par un "espace", et otous les "lignes" de *sont séparés par des "lignes" de "l'espace".

La direction du splat peut être l'une des huit directions o, par exemple:

1 2 3
4 o 5
6 7 8

Voici des exemples de splats ASCII de taille 4 dans des directions 5, 2et 3respectivement. Sur la gauche est le splat ASCII réel, et sur la droite est le même splat mais avec les "lignes" de "l'espace" remplacées par des "lignes" réelles (c'est --à- dire ou \ou |selon la direction) juste pour clarifier ce que l'on entend par un "ligne" d'espace.

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

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

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

Défi

Étant donné n ≥ 1 et l'une des 8 directions possibles, écrivez une fonction ou un programme qui sort le splat ASCII de taille n dans la direction donnée.

Entrée et sortie

Tout format d'entrée cohérent et raisonnable est autorisé. Vous n'avez pas besoin de mapper les directions vers les entiers 1 à 8 de la même manière que moi - si une autre façon de spécifier la direction est plus facile, allez-y. Mais dites ce que vous avez fait si ce n'est pas clair.

La sortie se compose de o, *, les espaces (U + 0020) et les nouvelles lignes (U + 000A) qui produisent le floc ASCII. Les espaces de début, de fin, sinon des espaces supplémentaires sont autorisés sur n'importe quelle ligne.

Règles

C'est du . Des règles standard s'appliquent.

Plus d'exemples

Size 1, any direction
o

Size 3, direction 6
* * o

  * *

    *

Size 5, direction 7
    o    

   * *

  * * *

 * * * *

* * * * *
ngm
la source

Réponses:

3

Fusain , 20 18 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

↘EN×*⊕ι

Dessinez un triangle diagonal de splats.

M↗o

Placez l'oeuf.

UE¬﹪η²

Pour des rotations uniformes, développez le splat horizontalement pour correspondre aux exigences de sortie. Cette exigence ne correspond pas aux attentes habituelles de Charcoal. Essayez-le en ligne! (verbeux) pour à quoi il ressemble sans.

⟲η

Faites pivoter l'éclat comme requis, en utilisant le code suivant pour les directions:

321
4o0
567

Cette version 37 de 31 octets évite les espaces étrangers en tournant uniquement à angle droit:

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

Essayez-le en ligne! Le lien est vers la version détaillée du code.

Neil
la source
2

Gelée , 37 octets

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

Essayez-le en ligne!

Instructions:

[12345678][21342134]

Erik le Outgolfer
la source
1

Python 2 , 185 octets

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

Essayez-le en ligne!

La numérotation va de 0 à 7, comme suit:

1 6 0
7 o 5
2 4 3

Notes: La plupart du travail consiste à générer les modèles de base pour (dans mon système de numérotation) 0et 4. Ensuite, la fonction gfait pivoter le tableau de a90 degrés d%4fois par récursivité pour générer les autres résultats.

Chas Brown
la source