เมืองหลวงเลื่อน


11

พื้นหลัง

ลองนึกภาพตัวอักษรภาษาอังกฤษเขียนออกมาในแถวตัวอักษร ABCDEFGHIJKLMNOPQRSTUVWXYZ- สมมติว่าเรามีเลนส์แบบปรับความกว้างพิเศษซึ่งเมื่อวางอยู่เหนือแถวมันจะแสดง "หน้าต่าง" ของตัวอักษรบางตัวพร้อมตัวอักษรที่อยู่ด้านนอกของเลนส์ที่ซ่อนอยู่จากมุมมอง นอกจากนี้เลนส์นี้ยังมีลักษณะการแปรปรวนดังนั้นตัวอักษรตัวแรกในเลนส์และตัวอักษรที่สองทุกครั้งหลังจากนั้นจะถูกลดขนาดลง แต่ตัวอักษรที่เหลือยังคงแสดงเป็นตัวพิมพ์ใหญ่

ตัวอย่างเช่นเราอาจจะมีเลนส์ที่มีความยาว 5 วางไว้ที่ไหนสักแห่งในช่วงกลางของตัวอักษรและเราเท่านั้นที่จะเห็น. jKlMn(ระยะเวลาการชั้นนำที่นี่เพื่อให้แน่ใจว่าช่องว่างการแสดง) - โน้ตKและMเป็นตัวพิมพ์ใหญ่ยังคงขณะที่j, lและnทุกคนที่ต่ำกว่า -cased เมื่อเราเลื่อนเลนส์นี้จากซ้ายไปขวาตามตัวอักษรตัวอักษรที่แตกต่างกันจะปรากฏขึ้นและตัวอักษรที่แตกต่างกันจะเป็นตัวพิมพ์ใหญ่ งานที่นี่คือการส่งออกตัวอักษรผลลัพธ์เป็นเลนส์เลื่อนตามตัวอักษร

ความท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่รับค่าอินพุทจำนวนเต็ม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

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เพิ่มในจำนวนไบต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.