Irisan huruf segitiga

15

Diberi nomor input ndari 1ke 26(atau 0ke 25), output pembacaan alfabet dari kiri ke kanan hingga dan termasuk huruf yang sesuai, dengan a=1, b=2, c=3, .... Twist adalah huruf-huruf juga harus diulang secara vertikal sesuai dengan posisi mereka dalam alfabet. Angka ganjil (saat 1-indeks) harus diseimbangkan melintasi garis horizontal, sementara angka genap harus bergantian antara memilih bagian atas atau bawah (Anda dapat memilih arah mana yang harus duluan). Jika Anda melakukan pengindeksan 0, maka tukar ganjil / genap dalam kalimat sebelumnya.

Dengan kata lain - jika nilai abjad sebuah huruf ?adalah #, maka harus ada #salinan surat itu di output, semuanya ada di #kolom th. Huruf-huruf ini harus seimbang di atas dan di bawah garis horizontal yang memiliki a. Jika huruf-huruf tersebut tidak dapat diseimbangkan secara merata, maka ganti memiliki huruf "ekstra" di atas dan di bawah garis itu.

Berikut adalah enam output pertama ( n = 1,2,3,4,5,6, 1-diindeks, memilih untuk berganti ke bawah dulu), dipisahkan oleh baris baru, sehingga Anda dapat melihat polanya. Komentar yang menjelaskan pola dimulai dengan #.

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

(lewati beberapa hingga 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

Aturan

  • Anda dapat memilih untuk mengeluarkan dalam huruf besar atau kecil, tetapi harus konsisten.
  • Output tidak boleh memiliki spasi putih yang asing, kecuali untuk baris tambahan tambahan opsional.
  • Program lengkap atau fungsi dapat diterima.
  • Nomor input dapat diambil melalui format yang sesuai .
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber

Jawaban:

5

Jelly ,2018 byte

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

Port jawaban Python saya. Cobalah online.

EDIT: Dennis menyimpan dua byte dengan menggunakan (tingkat atas) alih-alih Þ(urutkan berdasarkan)!

Lynn
sumber
8

Python 2, 101 99 byte

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 menyimpan dua byte dengan menyadari x*-(x&2)cukup sebagai kunci penyortiran - bagian bawah gambar yang dihasilkan tidak terpengaruh karena sortedmenjamin penyortiran yang stabil.

Lynn
sumber
Bisakah Anda tidak menjatuhkan -untuk menampilkan garis dalam urutan terbalik, yang saya percaya diperbolehkan?
Neil
Saya pikir x*-(x&2)berhasil.
xsot
6

Pyth , 26 byte

Skor sempurna untuk tantangan tentang alfabet.

j_C.e<u_G/k2.[.|1Q*hkbdQ<G

Cobalah online!

Biarawati Bocor
sumber
2

JavaScript (ES6), 127 126 byte

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

Menggunakan trik semacam @ Lynn. Menuliskan seluruh alfabet adalah dua byte lebih murah daripada menghitungnya. Sunting: Disimpan 1 byte berkat @ETHproductions karena saya lupa mencatat bahwa \nsebenarnya mewakili karakter baris baru literal. (Saya tidak suka memasukkan baris baru literal ke dalam jawaban saya ketika garisnya sangat panjang.)

Neil
sumber
Simpan dua byte pada alfabet: di btoa`...` mana ...diganti dengan hasil atob`abcdefghijklmnopqrstuvwxyzz` . (Juga, Anda dapat mengganti \ndengan baris baru literal.)
ETHproduksi
@ ETHproduk saya ambil yang akan menggunakan pengkodean ISO, bukan UTF?
Neil
Ya akan. Apakah kita diizinkan menggunakan ISO-8859-1 daripada UTF-8 di JS?
ETHproduksi
@ ETHproductions Mungkin tapi saya sepertinya tidak bisa membuatnya bekerja, jadi saya tidak akan menunjukkannya.
Neil