滑动资本


11

背景

想象一下用大写字母连续写成的英语字母- ABCDEFGHIJKLMNOPQRSTUVWXYZ。假设我们有一个特殊的可变宽度镜头,这样当放置在行上时,它会显示字母的某个“窗口”,而镜头外的字母则不可见。此外,此镜片具有翘曲特性,因此镜片内的第一个字母以及此后的每个第二个字母均小写,但其余字母仍显示为大写。

例如,我们可以在字母表的中间位置放置长度为5的镜头,我们将只能看到. jKlMn(在这里引期,以确保空白所示) -注意K,并M仍在资本,同时jln都较低装箱。当我们沿着字母从左到右滑动此镜头时,将显示不同的字母,并且不同的字母大写。此处的任务是在镜头沿字母滑动时输出结果字母。

挑战

编写一个程序或函数,该程序或函数采用输入整数0 < n < 27并输出或返回在上述镜头在字母表上滑动时可见的字符串。

对于n大于的值1,镜头从“悬挂”在字母的左侧开始,因此A在镜头的最右侧插槽中仅显示。因此A,根据镜头的长度,任何输出的第一行将是单个大写或小写字母。

同样,当透镜位于透镜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

规则

  • 适用标准输入/输出规则
  • 不允许出现标准漏洞
  • 适用标准代码高尔夫球规则
  • 如图所示,前导空格是必需的,以便我们知道字母表中的位置。
  • 每行不能有尾随空格(如图所示-输出不是矩形)。
  • 一条尾随的换行符是可选的。

Answers:



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`

其中\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真正增加到字节数的字节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.