Geben Sie einen ASCII-Splat aus.

10

Wenn Sie ein ASCII-Ei in eine bestimmte Richtung werfen, erhalten Sie einen ASCII-Splat der Größe n . Es "beginnt" mit eins o(dem Eigelb) und setzt sich in einer bestimmten Richtung mit "Linien" fort, die aus 2 bis n bestehen *. Die *'s sind durch ein "Leerzeichen" getrennt, und die ound alle "Linien" von *' s sind durch "Linien" von "Leerzeichen" getrennt.

Die Richtung des Splats kann eine von acht Richtungen sein o, zum Beispiel aus:

1 2 3
4 o 5
6 7 8

Hier sind Beispiele für ASCII splats der Größe 4 in Richtungen 5, 2und 3jeweils. Auf der linken Seite befindet sich der eigentliche ASCII-Splat, und auf der rechten Seite befindet sich derselbe Splat, wobei jedoch die "Linien" des "Leerzeichens" durch die tatsächlichen "Linien" (dh -oder \oder |je nach Richtung) ersetzt werden, um zu verdeutlichen, was mit a gemeint ist "Linie" des Raumes.

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

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

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

Herausforderung

Wenn n ≥ 1 und eine der 8 möglichen Richtungen gegeben ist, schreiben Sie eine Funktion oder ein Programm, das den ASCII-Splat der Größe n in der gegebenen Richtung ausgibt .

Ein- und Ausgabe

Jedes konsistente, vernünftige Eingabeformat ist zulässig. Sie müssen den Ganzzahlen 1 bis 8 nicht wie ich Richtungen zuordnen - wenn eine andere Art der Richtungsangabe einfacher ist, fahren Sie fort. Aber sagen Sie, was Sie getan haben, wenn es nicht klar ist.

Die Ausgabe besteht aus o, *, Räume (U + 0020) und neue Zeilen (U + 000A), die die ASCII Splat erzeugen. Führende, nachfolgende, ansonsten zusätzliche Leerzeichen sind in jeder Zeile zulässig.

Regeln

Das ist . Es gelten Standardregeln.

Mehr Beispiele

Size 1, any direction
o

Size 3, direction 6
* * o

  * *

    *

Size 5, direction 7
    o    

   * *

  * * *

 * * * *

* * * * *
ngm
quelle

Antworten:

3

Holzkohle , 20 18 Bytes

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

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:

↘EN×*⊕ι

Zeichnen Sie ein diagonales Dreieck aus Splats.

M↗o

Legen Sie das Ei.

UE¬﹪η²

Erweitern Sie den Splat für gleichmäßige Drehungen horizontal, um ihn an die Ausgabeanforderung anzupassen. Diese Anforderung entspricht nicht den üblichen Erwartungen von Charcoal. Probieren Sie es online aus! (ausführlich) wie es ohne aussieht.

⟲η

Drehen Sie den Splat nach Bedarf, indem Sie den folgenden Code für Anweisungen verwenden:

321
4o0
567

Diese 37 31-Byte-Version vermeidet überflüssige Leerzeichen, indem sie nur im rechten Winkel gedreht wird:

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

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes.

Neil
quelle
2

Gelee , 37 Bytes

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

Probieren Sie es online aus!

Richtungen:

[12345678][21342134]

Erik der Outgolfer
quelle
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

Probieren Sie es online aus!

Die Nummerierung reicht von 0 bis 7 wie folgt:

1 6 0
7 o 5
2 4 3

Anmerkungen: Der größte Teil der Arbeit besteht darin, die Grundmuster für (in meinem Nummerierungssystem) 0und zu generieren 4. Anschließend gdreht die Funktion das Array durch Rekursion um a90 Grad d%4, um die anderen Ergebnisse zu generieren.

Chas Brown
quelle