スライディングキャピタル


11

背景

英語のアルファベットが大文字で行に書かれていることを想像してください- ABCDEFGHIJKLMNOPQRSTUVWXYZ。特別な可変幅のレンズがあり、列の上に配置すると、アルファベットの特定の「窓」が表示され、レンズの外側の文字は視界から隠されているとします。さらに、このレンズには反り特性があるため、レンズ内の最初の文字とそれ以降の2文字ごとに小文字が使用されますが、残りの文字は大文字で表示されます。

たとえば、私たちは、アルファベットの真ん中のどこかに置い長さ5のレンズを持っている可能性があり、私たちは見るでしょう. jKlMn(空白のショーを確保するために、ここで期間を導く) -ノートKMまだ計上される、一方jl、およびnすべての低いです-ケース入り。このレンズをアルファベットに沿って左から右にスライドさせると、異なる文字が表示され、異なる文字が大文字になります。ここでのタスクは、レンズがアルファベットに沿ってスライドするときに結果の文字を出力することです。

チャレンジ

入力整数を取り、0 < n < 27上記のレンズがアルファベットを横切ってスライドするときに表示される文字列を出力または返すプログラムまたは関数を作成します。

nより大きい値の場合1、レンズはアルファベットの左側から「ぶら下がる」ことから始まるためA、レンズの右端のスロットにのみ表示されます。したがって、出力の最初の行Aは、レンズの長さに応じて、大文字または小文字の1つになります。

同様に、レンズZの左端のスロットにある場合、レンズのスライドが終了します(つまり、出力の最後の行は常に25スペースに小文字が続くことを意味しますz)。

入力: 1

出力:

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

入力: 4

出力:

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

入力: 26

出力:

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

ルール

  • 標準入出力ルールが適用されます
  • 標準的な抜け穴は許可されません
  • 標準のコードゴルフ規則が適用されます
  • 示されている先頭の空白は必須です。これにより、アルファベットのどこにいるかがわかります。
  • 各行の末尾に空白を含めることはできません(図のように、出力は長方形ではありません)。
  • 単一の末尾の改行はオプションです。

回答:



2

JavaScript(ES6)、130バイト

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`

where \nは、リテラルの改行文字を表します。出力四角形をループし、対角線の外側にスペースを出力すると同時に、文字コードに32を追加して、代替の四角形で小文字にします。を使用replaceすると、1バイト長くなります。

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`

1

AWK、160バイト

{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""}}

それは私が思いつく限りのタイトなものAWKです。3つの異なるprints を持ち、continue実際にバイトカウントに追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.