슬라이딩 수도


11

배경

영어 알파벳이 대문자로 쓰여 있다고 상상해보십시오 ABCDEFGHIJKLMNOPQRSTUVWXYZ. 행 위에 놓을 때 렌즈 외부의 글자가 보이지 않게 알파벳의 특정 "창"을 표시하는 특수 가변 너비 렌즈가 있다고 가정하십시오. 또한,이 렌즈는 뒤틀림 특성을 가지므로 렌즈 내부의 첫 번째 문자와 그 이후의 두 번째 문자는 모두 소문자로 표시되지만 나머지 문자는 여전히 대문자로 표시됩니다.

예를 들어, 우리는 알파벳의 중간 어딘가에 위치 길이 5의 렌즈를 가질 수 있고 우리는 볼 것이다 . jKlMn(공백 쇼를 위해 여기 기간을 선도) - 참고를 K하고 M여전히 대문자로, 그동안 j, l그리고 n모든 낮은 케이스. 알파벳을 따라 왼쪽에서 오른쪽으로이 렌즈를 밀면 다른 문자가 표시되고 다른 문자가 대문자로 표시됩니다. 여기서 작업은 렌즈가 알파벳을 따라 미끄러지면서 결과 문자를 출력하는 것입니다.

도전

입력 정수를 가져와 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

규칙

  • 표준 입 / 출력 규칙 적용
  • 허용되지 않는 표준 허점
  • 표준 코드 골프 규칙이 적용됩니다
  • 그림에서와 같이 선행 공백이 필요하므로 알파벳 위치를 알 수 있습니다.
  • 각 줄 뒤에 공백이있을 수 없습니다 (표시된대로 출력은 사각형이 아님).
  • 단일 후행 줄 바꿈은 선택 사항입니다.

답변:



2

자바 스크립트 (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를 가지고 바이트 수에 실제로 추가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.