สร้างบันไดให้ฉันหน่อย


24

บันไดสตริง

คำเตือน:นี่เป็นความท้าทายแรกที่ฉันเสนอ ข้อเสนอแนะใด ๆ และทั้งหมดยินดีต้อนรับ หากซ้ำกันโปรดชี้มันออกมา

นี่คือลิงค์ไปยังโพสต์แซนด์บ็อกซ์

เป้าหมาย

เป้าหมายของการท้าทายนี้คือการกำหนดสตริงและจำนวนเต็มให้พิมพ์สตริงลงในบล็อกที่มีขนาดเป็นจำนวนเต็ม หากคำมีอักขระมากกว่าขนาดของบล็อกให้พิมพ์เป็นรูปแบบ "ขั้นบันได" จากมากไปน้อย

กฎระเบียบ

  • "รูปแบบบันได" ที่กล่าวถึงข้างต้นหมายความว่าสำหรับทุกบล็อกของคำเดียวกันบล็อกนั้นจะต้องเริ่มต้นตรงที่บล็อกข้างบนนั้นสิ้นสุด ตรวจสอบกรณีทดสอบ (หรือถาม) หากคุณมีคำถามใด ๆ
  • หากคำแตกในหลายบล็อกคำต่อไปนี้จะต้องพิมพ์ด้วยจำนวนช่องว่างที่เพียงพอนั่นคือมันจะต้องแยกออกจากบล็อกต่ำสุดของคำก่อนหน้านี้โดยช่องว่างเดียว ตรวจสอบกรณีทดสอบ (หรือถาม) เพื่อชี้แจง
  • คุณสามารถสมมติว่าสตริงอินพุตจะประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เท่านั้น นอกจากนี้จะไม่มีช่องว่างหลายช่องติดกัน
  • คุณสามารถสันนิษฐานได้ว่าจำนวนเต็มจะอยู่ในช่วง [1, + ∞) เสมอ
  • อนุญาตให้เว้นวรรคช่องว่างหรือขึ้นบรรทัดใหม่
  • คุณสามารถใช้วิธีการที่เหมาะสมสำหรับ I / O
  • มาตรฐานช่องโหว่ใช้
  • นี่คือดังนั้นจึงเป็นรหัสที่สั้นที่สุด (เป็นไบต์ต่อภาษา) หลังจากหนึ่งสัปดาห์ (หรือมากกว่านั้น) ฉันจะยอมรับคำตอบที่สั้นที่สุดโดยรวม

กรณีทดสอบ

(String, Integer) => (Output)

"This is a large string", 3 => Thi is a lar  str
                                 s        ge   ing

"This is an even larger string!", 2 => Th  is an ev  la   st
                                        is        en  rg   ri
                                                       er   ng
                                                             !
"Ooooh dear, what a big string you have!", 3 
=> Ooo  dea  wha a big str   you hav
     oh   r,   t         ing       e!

"Staphylococcus saprophyticus", 4 => Stap        sapr
                                        hylo        ophy
                                           cocc        ticu
                                              us          s

"I hope you find this challenge interesting", 2
=> I ho  yo fi  th  ch    in
      pe  u  nd  is  al    te
                      le    re
                       ng    st
                        e     in
                               g

"Well, this test case looks kinda pointless now doesn't it?", 15
=> Well, this test case looks kinda pointless now doesn't it?

"This one looks a lot more interesting!", 1 => T o l a l m i
                                               h n o   o o n
                                               i e o   t r t
                                               s   k     e e
                                                   s       r
                                                           e
                                                           s
                                                           t
                                                           i
                                                           n
                                                           g
                                                           !
"Keep in mind, people: 'Punctuation! Does! Matter!'", 2
=> Ke  in mi  pe   'P      Do  Ma
    ep     nd  op   un      es  tt
            ,   le   ct      !   er
                 :    ua          !'
                       ti
                        on
                         !

จะมีช่องว่างนำหน้าในแต่ละบรรทัดเท่ากันหรือไม่
dzaima

โบนัส: ใช้ Zalgo เพื่อบล็อกขนาด -1 t̳͖̬̥̱͓̭̙̤͇̘̲ț͎̣̫̪̩̟̯͈͙͈̗̳͕̹̙̣ͅx̳͖̬̥̱͓̭̙̤͇̘̲ț͎̣̫̪̩̟̯͈͙͈̗̳͕̹̙̣ͅ
Luis Mendo

@dzaima ฉันไม่แน่ใจว่าคุณหมายถึงอะไร แต่ฉันไม่เห็นว่าทำไม สนใจที่จะให้ตัวอย่างหรือไม่
J. Sallé

@ J.Salle นี้
dzaima

@dzaima ใช่แน่นอนไม่มีปัญหา
J. Sallé

คำตอบ:


7

ถ่าน 22 ไบต์

F⪪θ «↑⸿⸿FLι«M¬﹪κIη↙§ικ

ลองออนไลน์! การเชื่อมโยงคือการสร้างรหัสเวอร์ชัน คำอธิบาย:

  θ                      First input
 ⪪                      Split on spaces
F   «                   Loop over each word
     ↑⸿⸿                Move the cursor to the top row and two columns right*
          ι             Current word
         L              Length
        F  «            Loop over implicit range
               κ        Current index
                 η      Second input
                I       Cast to integer
              ﹪         Modulo
             ¬          Logical not
            M     ↙     Move that many characters down and left
                    ι   Current word
                     κ  Current index
                   §    Index into word and implicitly print

* แม่นยำยิ่งขึ้น "เลื่อนไปที่จุดเริ่มต้นของบรรทัดถัดไปสองครั้ง แต่ราวกับว่าผืนผ้าใบหมุน" แก้ไข: ระหว่างการตั้งค่าความท้าทายนี้และคำตอบที่ได้รับการยอมรับ Charcoal ได้รับวิธีการแยกสตริงออกเป็นคู่ของตัวละครลดรหัส 16 ไบต์:
F⪪θ «↑⸿⸿F⪪ιIη«κ↙ ลองออนไลน์! การเชื่อมโยงคือการสร้างรหัสเวอร์ชัน คำอธิบาย:

  θ                 First input
 ⪪                  Split on spaces
F   «               Loop over each word
     ↑⸿⸿            Move the cursor to the top row and two columns right
          ι         Current wordIη
            η       Second input
           I        Cast to integer
         ⪪          Split into substrings of that length
        F    «      Loop over each substring
              κ     Print the substring
               ↙    Move the cursor down and left

การปฏิบัติตามกฎการท้าทายฉันยอมรับว่านี่เป็นคำตอบที่สั้นที่สุด (ณ วันที่ 6 ตุลาคม 2017)
J. Sallé

3

SOGL V0.12 , 28 27 26 ไบต์

ā,θ{0Eā;{ēb÷eb‰⁴bH*+I;Iž}┼

ลองที่นี่!

ฉันใช้ในขณะที่ทำสิ่งนี้ แต่มีเอกสารของมันมาก่อน

คำอธิบาย:

ā                            push an empty array - the main canvas
 ,                           push the first input
  θ{                         for each word (pushing the word each time)
    0E                         set the variable E to 0
      ā;                       below the current word place an empty array - current word canvas
        {               }      for each character of the word
         ēb÷                     push (E++ // B) - note that E is incremented after being used
            eb‰                  push E positive modulo B - like regular modulo but in the 0 output case it gives B
               ⁴                 duplicate the item below ToS
                bH               push B-1
                  *              multiply [(E++ // B) and B-1]
                   +             add [that multiplication to E‰B] - current letters X position
                    I            increase the X position to have one leading space row
                     ;           swap top 2 items - current X position and (E++ // B)
                      I          increase to create current letters Y position
                       ž         in those positions insert the current letter in the current words canvas
                         ┼     append to main canvas current word canvas horizontally

3

จาวาสคริ ES6, 187 183 174 166 163 148 145 143 141 140 138 ไบต์

  • สำหรับความสามารถในการอ่านเพิ่มจำนวนไบต์ในโค้ดและลบออกในจำนวนไบต์
  • แทน s = "", j = 0 ฉันได้ j = s = ""
  • แทนสำหรับ (i ใน s) - ปกติสำหรับลูป - ลบ 1 ไบต์
  • ใช้ค่าที่สร้างขึ้นแล้วในตัวสร้างดัชนีของอาร์เรย์ - ลบ 8 ไบต์
  • การใช้แล้วพร้อมกับค่า i = s.length (จากลูปแรก) ใน eval - แทนที่จะเป็นความยาวอาร์เรย์จริง - ทำให้เกิดช่องว่างต่อท้ายซึ่งได้รับอนุญาต
  • ใช้ map ของ S แทน eval - ลดขนาดลง 3 ไบต์
  • ใช้การเติมแทนการเตรียมใช้งานอาร์เรย์ว่างเปล่าดังนั้นจึงไม่จำเป็นต้องวนซ้ำในผลลัพธ์แผนที่
  • สามารถแทนที่ || ด้วย | - ลดลง 2 ไบต์
  • ขอบคุณ @Justin Mariner - แทนที่เหตุการณ์ == "" ด้วย <"!" ลดลง 2 ไบต์
  • ย้ายเงื่อนไขจาก [I] ไปยังคำสั่งอื่นเพื่อลดหนึ่ง "u <"! "" - ลดขนาด 2 ไบต์
  • แทน (I + = 2, j = 0) - j =! (I + = 2) - ลดลง 1 ไบต์
  • "สำหรับจาก" แทนสำหรับ
    F=(s,n)=>{R=[I=j=i=0]
    for(u of s)
    a=R[z=u<"!"?j=!(I+=2):(j%n&&I++,j++/n|0)]=R[z]||[...s].fill` `,a[I]=u
    return R.map(x=>x.join``).join`
    `}
    console.log(F("This is a large string", 3));
    console.log(F("This is an even larger string!", 2));
    console.log(F("Ooooh dear, what a big string you have!", 3));
    console.log(F("Staphylococcus saprophyticus", 4));
    console.log(F("I hope you find this challenge interesting", 2));
    console.log(F("Well, this test case looks kinda pointless now doesn't it?", 15));
    console.log(F("This one looks a lot more interesting!", 1))
    console.log(F("Keep in mind, people: 'Punctuation! Does! Matter!'", 2));

1
คุณควรจะสามารถที่จะบันทึกไบต์คู่โดยใช้แทน<"!" ==" "
Justin Mariner

2

C #, 200 ไบต์

int x=-2,y=0;Regex.Split(i,@"\s+").ToList().ForEach(w =>{y=0;Regex.Matches(w,".{0,"+s+"}").Cast<Match>().ToList().ForEach(c=>{x+=(y==0?2:s-1);Console.SetCursorPosition(x,y);Console.Write(c);y++;});});

ที่ไหนสตริงจะถูกระบุโดยผมและขนาดจะถูกระบุโดยs

เช่น

string i = "Staphylococcus saprophyticus";
int s = 2;    
int x=-2,y=0;Regex.Split(i,@"\s+").ToList().ForEach(w =>{y=0;Regex.Matches(w,".{0,"+s+"}").Cast<Match>().ToList().ForEach(c=>{x+=(y==0?2:s-1);Console.SetCursorPosition(x,y);Console.Write(c);y++;});});

โดยทั่วไปส่วนแรกRegex.Splitใช้ช่องว่างสีขาวในการแยกประโยคเป็นคำพูดและRegex.Matchesแยกแต่ละคำเป็นชิ้นที่ระบุโดยs ชิ้นถูกเขียนไปยังตำแหน่งเคอร์เซอร์ (x, y) โดยที่ Y ถูกตั้งค่าเป็น 0 สำหรับคำใหม่ทุกคำและ x จะเพิ่มขึ้น 2 สำหรับชิ้นแรกของคำและต่อมา (s-1) สำหรับแต่ละชิ้น

x เริ่มต้นชีวิตที่ -2 เพื่อให้แน่ใจว่าการใช้งานครั้งแรกถูกตั้งค่าเป็น 0

ฉันมีความรู้ไม่เพียงพอใน C # เรื่องไม่สำคัญที่จะทำให้มันเล็กลง แต่สงสัยว่ามันอาจจะเป็น


2
มีสาเหตุใดที่ทำให้คุณใช้ s เป็น int และ i แทน string แทนที่จะเป็นอย่างอื่น?
Tahg

ฮ่า ไม่มีความคิด - เพียงแค่ช่วงเวลาสั้น ๆ ในช่วงพักกลางวันของฉัน ฉันสำหรับขนาดและอินพุตสำหรับขนาดอาจ?
supermeerkat


1

Perl 5, 59 ไบต์

55 รหัสไบต์ + -ai4

$-=s/.{$^I}\K(?=.)/\x1b[1B\x1b[1D/g,print$_,"\x1b[1A"x$-,$"for@F

หมายเหตุ: \x1bs เป็นตัวESCอักษร แต่หนีไปที่นี่เพื่อคัดลอกและวางได้ง่าย

สคริปต์นี้ใช้ ANSI escape sequences และต้องการอินพุตผ่าน-iแฟล็กซึ่งไม่ใช่มาตรฐาน หากสิ่งเหล่านี้ไม่เป็นที่ยอมรับโปรดแจ้งให้เราทราบและฉันจะอัปเดต

ตัวอย่างการวิ่ง

perl -ai3 string-stairs.pl <<< 'This is a large string' 2>/dev/null
Thi is a lar  str   
  s        ge   ing

perl -ai2 string-stairs.pl <<< 'This is an even larger string!' 2>/dev/null
Th  is an ev  la   st   
 is        en  rg   ri
                er   ng
                      !

perl -ai3 string-stairs.pl <<< 'Ooooh dear, what a big string you have!' 2>/dev/null
Ooo  dea  wha a big str   you hav  
  oh   r,   t         ing       e!

perl -ai4 string-stairs.pl <<< 'Staphylococcus saprophyticus' 2>/dev/null
Stap        sapr       
   hylo        ophy
      cocc        ticu
         us          s

perl -ai2 string-stairs.pl <<< 'I hope you find this challenge interesting' 2>/dev/null
I ho  yo fi  th  ch    in     
   pe  u  nd  is  al    te
                   le    re
                    ng    st
                     e     in
                            g

perl -ai15 string-stairs.pl <<< "Well, this test case looks kinda pointless now doesn't it?" 2>/dev/null
Well, this test case looks kinda pointless now doesn't it? 

perl -ai1 string-stairs.pl <<< 'This one looks a lot more interesting!' 2>/dev/null
T o l a l m i 
h n o   o o n
i e o   t r t
s   k     e e
    s       r
            e
            s
            t
            i
            n
            g
            !

perl -ai2 string-stairs.pl <<< "Keep in mind, people: 'Punctuation! Does! Matter!'" 2>/dev/null
Ke  in mi  pe   'P       Do   Ma    
 ep     nd  op   un       es   tt
         ,   le   ct       !    er
              :    ua            !'
                    ti
                     on
                      !
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.