Plastry trójkątnych alfabetów

15

Biorąc pod uwagę liczbę wejściową nod 1do 26(lub 0do 25), wypisz odczyt alfabetu od lewej do prawej, aż do tej odpowiedniej litery, za pomocą a=1, b=2, c=3, .... Skręt polega na tym, że litery muszą być również powtarzane w pionie, odpowiednio do ich pozycji w alfabecie. Liczby nieparzyste (gdy 1-zindeksowane) powinny być wyważone wzdłuż linii poziomej, podczas gdy liczby parzyste powinny zmieniać się na przemian na korzyść góry lub dołu (możesz wybrać, w którym kierunku pójść pierwszy). Jeśli indeksujesz 0, zamień nieparzyste / parzyste w poprzednim zdaniu.

Sformułowane w inny sposób - w przypadku gdy wartość alfabetyczne listu ?jest #, to nie powinno być #kopie tego listu na wyjściu, wszystkie z nich w #kolumnie Th. Litery te powinny być równomiernie wyważone powyżej i poniżej poziomej linii, która ma a. Jeśli litery nie mogą być wyrównane równomiernie, naprzemiennie miej „dodatkową” literę powyżej i poniżej tej linii.

Oto sześć pierwszych wyników ( n = 1,2,3,4,5,6, 1-indeksowanych, wybierając alternatywnie do dolnej dolnej), oddzielonych znakami nowej linii, dzięki czemu można zobaczyć wzorzec. Komentarze wyjaśniające wzorzec zaczynają się od #.

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

(pomiń kilka 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

Zasady

  • Możesz wybrać wyjście wielkimi lub małymi literami, ale musi być spójne.
  • Dane wyjściowe nie mogą zawierać obcych białych znaków, z wyjątkiem opcjonalnego końcowego znaku nowej linii.
  • Dopuszczalny jest pełny program lub funkcja.
  • Numer wejściowy można pobrać w dowolnym odpowiednim formacie .
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło

Odpowiedzi:

5

Galaretka ,2018 bajtów

Ḷ&2’×ḶỤØaḣ⁸¤ṫW€UGU

Port mojej odpowiedzi w języku Python. Wypróbuj online.

EDYCJA: Dennis zapisał dwa bajty, używając (ocena w górę) zamiast Þ(sortuj według)!

Lynn
źródło
8

Python 2, 101 99 bajtów

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 zapisał dwa bajty, zdając sobie sprawę, że x*-(x&2)wystarcza jako klucz sortujący - dolna połowa wynikowego obrazu pozostaje nienaruszona, ponieważ sortedgwarantuje stabilne sortowanie.

Lynn
źródło
Czy nie możesz upuścić a, -aby wypisywać wiersze w odwrotnej kolejności, co moim zdaniem jest dopuszczalne?
Neil,
Myślę, że x*-(x&2)działa.
xsot,
2

JavaScript (ES6), 127 126 bajtów

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

Używa sztuczki sortowania @ Lynn. Napisanie całego alfabetu było o dwa bajty tańsze niż jego obliczenie. Edycja: Zapisałem 1 bajt dzięki @ETHproductions, ponieważ zapomniałem zauważyć, że \nfaktycznie reprezentuje dosłowny znak nowej linii. (Nie lubię wstawiać dosłownych znaków nowej linii w mojej odpowiedzi, gdy linia jest tak długa.)

Neil
źródło
Zapisz dwa bajty na alfabecie: btoa`...` gdzie ...jest zastąpione wynikiem atob`abcdefghijklmnopqrstuvwxyzz` . (Można również zastąpić \ndosłowną nową linią.)
ETHprodukcje
@ETHproductions Rozumiem, że używałbym kodowania ISO zamiast UTF?
Neil
Tak to zrobi. Czy w JS wolno nam używać ISO-8859-1 zamiast UTF-8?
ETHproductions
@ETHproductions Prawdopodobnie, ale nie wydaje mi się, żeby działał, więc nie pokażę tego.
Neil