Scheiben von dreieckigen Buchstaben

15

Geben Sie bei einer eingegebenen Zahl nvon 1bis 26(oder 0bis 25) das Alphabet von links nach rechts bis einschließlich des entsprechenden Buchstabens mit aus a=1, b=2, c=3, .... Die Drehung ist die Buchstaben müssen auch vertikal entsprechend ihrer Position im Alphabet wiederholt werden. Ungerade Zahlen (wenn 1indiziert) sollten über die horizontale Linie ausgeglichen werden, während gerade Zahlen zwischen oben und unten wechseln sollten (Sie können wählen, in welche Richtung Sie zuerst gehen möchten). Wenn Sie 0-indizieren, tauschen Sie im vorherigen Satz ungerade / gerade aus.

Anders ausgedrückt: Wenn der alphabetische Wert eines Buchstabens gleich ?ist #, sollte #die Ausgabe Kopien dieses Buchstabens enthalten, alle in der #dritten Spalte. Diese Buchstaben sollten gleichmäßig über und unter der waagerechten Linie mit dem Symbol ausgeglichen sein a. Wenn die Buchstaben nicht gleichmäßig verteilt werden können, müssen Sie abwechselnd den "zusätzlichen" Buchstaben über und unter dieser Zeile einfügen.

Hier sind die ersten sechs Ausgaben ( n = 1,2,3,4,5,6, 1-indiziert, alternierend zuerst nach unten), die durch Zeilenumbrüche getrennt sind, damit Sie das Muster sehen können. Kommentare, die das Muster erklären, beginnen mit #.

a         # On a line by itself

ab
 b        # The "extra" letter is below the horizontal

  c
abc       # The 'c' splits evenly
 bc

   d      # Because the 'b' was below, the extra 'd' must be above
  cd
abcd
 bcd


   de
  cde
abcde     # The 'e' balances
 bcde
    e

   def
  cdef
abcdef
 bcdef
    ef
     f    # Since the 'd' was above, the extra 'f' must be below

(überspringen ein paar zu n=26)

                       xyz
                      wxyz
                   tuvwxyz
                  stuvwxyz
               pqrstuvwxyz
              opqrstuvwxyz
           lmnopqrstuvwxyz
          klmnopqrstuvwxyz
       hijklmnopqrstuvwxyz
      ghijklmnopqrstuvwxyz
   defghijklmnopqrstuvwxyz
  cdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
 bcdefghijklmnopqrstuvwxyz
    efghijklmnopqrstuvwxyz
     fghijklmnopqrstuvwxyz
        ijklmnopqrstuvwxyz
         jklmnopqrstuvwxyz
            mnopqrstuvwxyz
             nopqrstuvwxyz
                qrstuvwxyz
                 rstuvwxyz
                    uvwxyz
                     vwxyz
                        yz
                         z

Regeln

  • Sie können zwischen der Ausgabe in Groß- und Kleinschreibung wählen, diese muss jedoch konsistent sein.
  • Die Ausgabe darf keine Leerzeichen enthalten, mit Ausnahme einer optionalen nachgestellten Newline.
  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
  • Die eingegebene Nummer kann über ein beliebiges geeignetes Format übernommen werden .
  • Standardlücken sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
AdmBorkBork
quelle

Antworten:

8

Python 2, 101 99 Bytes

r=range(input())
for x in sorted(r,key=lambda x:x*-(x&2)):print bytearray([97+i,32][i<x]for i in r)

xsot sparte zwei Bytes, indem es x*-(x&2)als Sortierschlüssel ausreicht - die untere Hälfte des resultierenden Bildes bleibt unberührt, da sortedeine stabile Sortierung gewährleistet ist.

Lynn
quelle
Kannst du nicht a fallen lassen, -um die Zeilen in umgekehrter Reihenfolge auszugeben, was ich für zulässig halte?
Neil
Ich denke x*-(x&2)funktioniert.
Xsot
2

JavaScript (ES6), 127 126 Bytes

n=>[...Array(n).keys()].sort((a,b)=>a*~-(a&2)-b*~-(b&2)).map(i=>` `.repeat(i)+`abcdefghijklmnopqrstuvwxyz`.slice(i,n)).join`\n`

Verwendet @ Lynns Sortiertrick. Das ganze Alphabet zu schreiben war zwei Bytes billiger als es zu berechnen. Bearbeiten: 1 Byte dank @ETHproductions gespeichert, da ich vergessen habe zu beachten, dass dies \ntatsächlich das wörtliche Zeilenumbruchzeichen darstellt. (Ich mag es nicht, wörtliche Zeilenumbrüche in meine Antwort einzufügen, wenn die Zeile so lang ist.)

Neil
quelle
Speichern Sie zwei Bytes im Alphabet: btoa`...` wo ...wird durch das Ergebnis von ersetzt atob`abcdefghijklmnopqrstuvwxyzz` . (Sie können auch durch \neinen wörtlichen Zeilenumbruch ersetzen .)
ETHproductions
@ETHproductions Ich nehme an, dass ISO-Codierung anstelle von UTF verwendet würde?
Neil
Ja es würde. Dürfen wir in JS ISO-8859-1 anstelle von UTF-8 verwenden?
ETHproductions
@ETHproductions Wahrscheinlich, aber ich kann es scheinbar nicht zum Laufen bringen, also werde ich es nicht zeigen.
Neil