Modal Geser

11

Latar belakang

Bayangkan alfabet Inggris yang dituliskan berurutan dalam huruf kapital - ABCDEFGHIJKLMNOPQRSTUVWXYZ. Misalkan kita memiliki lensa lebar variabel khusus sehingga, ketika ditempatkan di atas baris, itu menunjukkan "jendela" tertentu dari alfabet, dengan huruf di luar lensa tersembunyi dari pandangan. Selain itu, lensa ini memiliki karakteristik melengkung, sehingga huruf pertama di dalam lensa, dan setiap huruf kedua sesudahnya, memiliki huruf yang lebih rendah, tetapi huruf yang tersisa masih menunjukkan huruf besar.

Sebagai contoh, kita bisa memiliki lensa panjang 5 ditempatkan di suatu tempat di tengah-tengah alfabet dan kami hanya akan melihat . jKlMn(periode menjelang sini untuk memastikan spasi acara) - catatan Kdan Mmasih dikapitalisasi, sedangkan j, l, dan nsemua yang lebih rendah berbasis Saat kami menggeser lensa ini dari kiri ke kanan sepanjang alfabet, huruf yang berbeda akan ditampilkan dan huruf yang berbeda dikapitalisasi. Tugas di sini adalah untuk mengeluarkan huruf yang dihasilkan saat lensa slide sepanjang alfabet.

Tantangan

Tulis program atau fungsi yang mengambil integer input 0 < n < 27dan mengeluarkan atau mengembalikan string yang terlihat ketika lensa yang dijelaskan di atas meluncur melintasi alfabet.

Untuk nilai yang nlebih besar dari 1, lensa dimulai dengan "menggantung" dari sisi kiri alfabet, sehingga hanya yang Aditampilkan di slot paling kanan dari lensa. Baris pertama dari setiap output dengan demikian akan menjadi tunggal A, baik huruf besar atau kecil tergantung pada panjang lensa.

Demikian pula, lensa selesai meluncur ketika Zberada di slot paling kiri dari lensa (yang berarti bahwa baris terakhir dalam output apa pun akan selalu 25 spasi diikuti oleh huruf kecil z).

Contohnya

Memasukkan: 1

Keluaran:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
                q
                 r
                  s
                   t
                    u
                     v
                      w
                       x
                        y
                         z

Memasukkan: 4

Keluaran:

A
aB
AbC
aBcD
 bCdE
  cDeF
   dEfG
    eFgH
     fGhI
      gHiJ
       hIjK
        iJkL
         jKlM
          kLmN
           lMnO
            mNoP
             nOpQ
              oPqR
               pQrS
                qRsT
                 rStU
                  sTuV
                   tUvW
                    uVwX
                     vWxY
                      wXyZ
                       xYz
                        yZ
                         z

Memasukkan: 26

Keluaran:

A
aB
AbC
aBcD
AbCdE
aBcDeF
AbCdEfG
aBcDeFgH
AbCdEfGhI
aBcDeFgHiJ
AbCdEfGhIjK
aBcDeFgHiJkL
AbCdEfGhIjKlM
aBcDeFgHiJkLmN
AbCdEfGhIjKlMnO
aBcDeFgHiJkLmNoP
AbCdEfGhIjKlMnOpQ
aBcDeFgHiJkLmNoPqR
AbCdEfGhIjKlMnOpQrS
aBcDeFgHiJkLmNoPqRsT
AbCdEfGhIjKlMnOpQrStU
aBcDeFgHiJkLmNoPqRsTuV
AbCdEfGhIjKlMnOpQrStUvW
aBcDeFgHiJkLmNoPqRsTuVwX
AbCdEfGhIjKlMnOpQrStUvWxY
aBcDeFgHiJkLmNoPqRsTuVwXyZ
 bCdEfGhIjKlMnOpQrStUvWxYz
  cDeFgHiJkLmNoPqRsTuVwXyZ
   dEfGhIjKlMnOpQrStUvWxYz
    eFgHiJkLmNoPqRsTuVwXyZ
     fGhIjKlMnOpQrStUvWxYz
      gHiJkLmNoPqRsTuVwXyZ
       hIjKlMnOpQrStUvWxYz
        iJkLmNoPqRsTuVwXyZ
         jKlMnOpQrStUvWxYz
          kLmNoPqRsTuVwXyZ
           lMnOpQrStUvWxYz
            mNoPqRsTuVwXyZ
             nOpQrStUvWxYz
              oPqRsTuVwXyZ
               pQrStUvWxYz
                qRsTuVwXyZ
                 rStUvWxYz
                  sTuVwXyZ
                   tUvWxYz
                    uVwXyZ
                     vWxYz
                      wXyZ
                       xYz
                        yZ
                         z

Aturan

  • Standard aturan input / output berlaku
  • Celah standar tidak diijinkan
  • Aturan standar kode-golf berlaku
  • Ruang putih terkemuka seperti yang ditunjukkan diperlukan, sehingga kami tahu di mana kami berada dalam alfabet.
  • Setiap baris tidak dapat memiliki spasi spasi (seperti yang ditunjukkan - output bukan persegi panjang).
  • Satu baris tambahan baru adalah opsional.
AdmBorkBork
sumber
1
Terkait
Alex A.

Jawaban:

2

JavaScript (ES6), 130 byte

n=>[...Array(n+25)].map(_=>[...Array(26)].map(_=>String.fromCharCode(j++<i|i+n<j?32:j+(j-i)%2*32),++i,j=64).join``,i=64-n).join`\n`

Dimana \nmewakili karakter baris baru literal. Bekerja dengan mengulangi persegi panjang keluaran dan menghasilkan ruang di luar diagonal sambil menambahkan 32 ke kode karakter untuk huruf kecil dalam kuadrat alternatif. Penggunaan replacetampaknya lebih panjang 1 byte:

n=>[...Array(n+25)].map(_=>' '.repeat(26).replace(/./g,s=>j++<i|i+n<j?s:String.fromCharCode(j+(j-i)%2*32),++i,j=64),i=64-n).join`\n`
Neil
sumber
1

AWK, 160 byte

{d=-$1
m=25
for(;i<m+$1;i++){f="%"(++d<0?0:d<m?d:m)"s"
c=u=65
l=97
printf f,""
for(j=++E-$1;j<E&&j<26;j++){c=c==u?l:u
if(j<0)continue
printf("%c",j+c)}print""}}

Itu seketat yang saya bisa pikirkan AWK. Memiliki 3 prints berbeda dan continuebenar - benar menambah byte-count.

Robert Benson
sumber