หอคอยแห่งสาย


22

รับสตริงข้อความเอาท์พุทเป็น 'หอคอย'

แต่ละส่วนของสตริง (ของแบบฟอร์ม0:n) ซ้ำแล้วซ้ำอีก5*nดังนั้นตัวอักษรตัวแรกจะถูกทำซ้ำ 5 ครั้งจากนั้นครั้งแรกและครั้งที่สอง 10 ครั้ง ฯลฯ

ตัวอย่าง:

'hello' ->

['h']  
['h']  
['h']  
['h']  
['h']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  


'cat' ->

['c']  
['c']  
['c']  
['c']  
['c']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  

กฎ:

คุณสามารถส่งออกแต่ละเลเยอร์เป็นรายการของตัวละครหรือเพียงแค่สตริงของพวกเขาเข้าด้วยกัน


ยินดีต้อนรับสู่ PPCG! ความท้าทายที่ดี
จูเซปเป้

ฉันพยายามทำความสะอาดการจัดรูปแบบและอธิบายความท้าทายที่ดีขึ้นเล็กน้อย ฉันเข้าใจความท้าทายใช่มั้ย
Rɪᴋᴇʀ

2
เราสามารถรับอินพุตเป็นรายการของตัวละครได้หรือไม่?
JayCe

5
เราสามารถส่งออก 2D-อาร์เรย์ของสตริงชอบดังนั้น: [["c","c","c","c","c"],["ca","ca","ca","ca","ca","ca","ca","ca","ca","ca"],...]?
Shaggy

3
มีเอาต์พุตที่ขึ้นบรรทัดใหม่หรือนำขึ้นบรรทัดใหม่หรือไม่? เราสามารถสมมติว่าอินพุตไม่ได้ขึ้นบรรทัดใหม่ได้หรือไม่
ความซ้ำซ้อน

คำตอบ:



8

05AB1E , 6 ไบต์

ηā5*ÅΓ

ลองออนไลน์!

ส่งคืนรายการของสตริง

คำอธิบาย

     ÅΓ # Run-length decode...
η       # ... the prefixes of the input
 ā5*и   # ... with the length range multiplied by 5 -- [5, 10, 15, 20, 25]

@KevinCruijssen ขอบคุณที่สังเกตว่า! ฉันไม่ควรเล่นกอล์ฟในตอนเช้าหากไม่มีกาแฟก่อน :-(
Kaldo

1
การใช้การถอดรหัสความยาวรันช่วยลด 3 ไบต์:ηā5*ÅΓ
Adnan

@Adnan Brilliant ขอบคุณ! ฉันคิดว่ามันสมควรคำตอบของตัวเองแม้ว่าคุณจะลดจำนวนไบต์ลง 33% ... ฉันจะกลับไปใช้วิธีแก้ปัญหาเดิมของฉันหากคุณตัดสินใจที่จะโพสต์ด้วยตนเอง
Kaldo

เป็นคนดีฉันมีηvyg5*Fy=8
Magic Octopus Urn



6

TI-Basic (TI-84 Plus CE), 29 ไบต์ (27 โทเค็น)

For(A,1,length(Ans
For(B,1,5A
Disp sub(Ans,1,A
End
End

คำอธิบาย:

For(A,1,length(Ans # 9 bytes, 8 tokens: for A from 1 to the length of the string
For(B,1,5A         # 8 bytes, 8 tokens:  5*A times
Disp sub(Ans,1,A   # 9 bytes, 8 tokens:   Print the first A characters of the string 
End                # 2 bytes, 2 tokens:  end loop
End                # 1 byte,  1 token:  end loop

6

เรติน่า 15 ไบต์

.
$.>`*5*$($>`¶

ลองออนไลน์! ลิงค์มีกรณีทดสอบ คำอธิบาย:

.

จับคู่อักขระแต่ละตัวในสตริง

$.>`*5*$($>`¶

$`เป็นคำนำหน้าของการแข่งขัน จอประสาทตาจะมีตัวดัดแปลงสองตัว>ปรับเปลี่ยนให้อยู่ในบริบทของสตริงระหว่างการจับคู่แบบต่อเนื่องในขณะที่.ใช้ความยาว เราจึงเริ่มต้นด้วยส่วนนำหน้าของคำต่อท้ายซึ่งเทียบเท่ากับการจับคู่รวมถึงส่วนนำหน้าด้วย วิธีนี้ช่วยประหยัด 2 ไบต์โดยใช้การจับคู่ที่ทับซ้อนกัน $(แล้ว concatenates ว่ามีการขึ้นบรรทัดใหม่ที่5*ซ้ำมันแล้ว$.>`ซ้ำมันเป็นจำนวนมากอีกครั้งที่ได้รับจากความยาวของมัน




6

Cubix ,  44  40 ไบต์

i.!?@UBqwW_#/>u...;B^...?qo;;q*n5;oN/./)

ลองออนไลน์!

สิ่งนี้ยังคงมีตัวเลือกไม่มาก แต่มันก็ดีกว่าเมื่อก่อนเล็กน้อย

ตามคำอธิบายสั้น ๆ ตัวละครจะถูกจับจากอินพุตและทดสอบสำหรับ EOI (-1) ให้หยุดถ้าเป็น สแต็กจะกลับรายการ รับจำนวนไอเท็มบนสแต็กและหลายรายการด้วย -5 วางลงที่ด้านล่างของสแต็คและทำความสะอาด วนซ้ำผ่านสแต็คจนกระทั่งจำนวนลบ พิมพ์บรรทัดใหม่เพิ่มจำนวนถ้า 0 ลดจำนวนศูนย์ย้อนกลับสแต็กและเริ่มจากอินพุตอีกครั้งมิฉะนั้นวนซ้ำผ่านสแต็คพิมพ์จนกว่าจะมีจำนวนลบ ... ad nauseum

ศกมันดูเหมือน

      i . !
      ? @ U
      B q w
W _ # / > u . . . ; B ^
. . . ? q o ; ; q * n 5
; o N / . / ) . . . . .
      . . .
      . . .
      . . .

ดูออนไลน์



5

จาวาสคริปต์, 48 46 ไบต์

(ขอบคุณ @redundancy)

แก้ไข: ผู้เขียนชี้แจงและคำตอบนี้ไม่ถูกต้อง แต่ฉันจะทิ้งไว้ที่นี่ไม่มีการเปลี่ยนแปลง

ส่งคืนอาร์เรย์ของสตริงหลายบรรทัด

s=>[...s].map(c=>(q+=c).repeat(5*++i),i=q=`
`)

ลองมัน

f = s=>[...s].map(c=>(q+=c).repeat(5*++i),i=q=`
`);

console.log( f("hello").join`` );

กลยุทธ์ที่มีศักยภาพ:

มันไม่ได้ช่วยอะไรมาก แต่อาจมีบางคนสามารถใช้สิ่งนี้:

จำนวนอักขระที่บรรทัด (0 ดัชนี) iเป็นfloor(sqrt(2/5*i+1/4)+1/2)ซึ่งเป็นที่แข็งแรงเล่นกอล์ฟใน JavaScript (.4*i+.25)**.5+.5|0เป็น

สำหรับสตริงที่มีความยาว nมีn*(n+1)*5/2สาย

บางที: s=>{for(i=0;(n=(.4*i+++.25)**.5+.5|0)<=s.length;)console.log(s.slice(0,n))}


1
สมมติว่ารูปแบบผลลัพธ์ของคุณถูกต้องตามความท้าทายคุณสามารถบันทึก 2 ไบต์ดังที่แสดงไว้ที่นี่: ลองออนไลน์!
ความซ้ำซ้อน



3

Husk , 8 ไบต์

ΣzoR*5Nḣ

ลองออนไลน์!

คำอธิบาย

Σz(R*5)Nḣ  -- example input: "ab"
        ḣ  -- non-empty prefixes: ["a","ab"]
 z(   )N   -- zip with [1..]
    *5     -- | multiply by 5
   R       -- | replicate
           -- : [["a","a","a","a","a"],["ab","ab","ab","ab","ab","ab","ab","ab","ab","ab"]]
Σ          -- concat: ["a","a","a","a","a","ab","ab","ab","ab","ab","ab","ab","ab","ab","ab"]

3

Haskell, 46 43 42 ไบต์

f s=do n<-[1..length s];take n s<$[1..n*5]

ลองออนไลน์!

น่าเศร้าที่initsต้องการimport Data.Listดังนั้น

import Data.List
((<$)<*>(>>[1..5])=<<).inits

ด้วย 45 ไบต์จะยาวกว่า

แก้ไข: -1 ไบต์ขอบคุณ @BWO


3

ถ่าน 11 ไบต์

F⊕LθE×⁵ι…θι

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด เอาท์พุทรวม 0 ซ้ำของสตริงย่อยความยาวเป็นศูนย์ คำอธิบาย:

   θ          Input string
  L           Length
 ⊕            Incremented
F             Loop over implicit range
      ⁵       Literal 5
       ι      Current index
     ×        Multiply
    E         Map over implicit range
         θ    Input string
          ι   Current index
        …     Chop to length
              Implicitly print each string on its own line


3

PowerShell , 40 20 25 ไบต์

คะแนนลดลงครึ่งหนึ่งขอบคุณ mazzy
+5 ไบต์ขอบคุณ AdmBorkBork ที่ชี้ให้เห็นรายละเอียด

$args|%{,($s+=$_)*5*++$i}

ลองออนไลน์!

รับอินพุตผ่านการกระจาย ทำงานโดยการสร้างสตริงโดยการเพิ่มอักขระตัวถัดไปกับตัวเองแปลงเป็นอาร์เรย์องค์ประกอบหนึ่งแล้วทำซ้ำ5*iครั้ง



@ mazzy Dang การพยายามบันทึกดัชนีแทนตัวละครทำให้ฉันหลงทาง ขอบคุณ
Veskah

@AdmBorkBork ฮ่า ๆ ๆ ควรได้รับการแก้ไขแล้ว
Veskah

2

MATLขนาด 12 ไบต์

f"G@:)@5*1X"

ลองออนไลน์!

f               % Get the indices of input i.e. range 1 to length(input)
 "              % For loop over that
   G            % Push input string
    @           % Push current loop index
     :          % Range 1 to that
      )         % Index at those positions (substring 1 to i)
       @5*      % Multiply loop index by 5
          1X"   % Repeat the substring that many times rowwise
                % Results collect on the stack and are 
                %  implicitly output at the end

2

V , 17 ไบต์

òïç$îî/6Ä
Hl$xòxú

คาดว่าอินพุทโดยไม่ขึ้นบรรทัดใหม่และเอาต์พุตด้วยการขึ้นบรรทัดใหม่ชั้นนำที่ฟุ่มเฟือย

ฉันสามารถลบรายการนี้ได้หากอินพุต / เอาท์พุตละเมิดข้อกำหนดเฉพาะ

ลองออนไลน์!

21 ไบต์

òïç$îî/6Ä
Hl$xòxíîî/ò

คาดว่าอินพุตจะไม่ขึ้นบรรทัดใหม่ แต่เอาต์พุตจะมีหนึ่งบรรทัดขึ้นต้นและนำหน้าขึ้นบรรทัดใหม่เท่านั้น

คำอธิบาย

สตริงย่อยที่แตกต่างกันจะถูกคั่นด้วยบรรทัดใหม่สองบรรทัดติดต่อกันเพื่อให้การทำสำเนา linewise ใช้กับบรรทัดที่ตรงกับ regex $\n\nเท่านั้น

เมื่อคำสั่งการทำซ้ำ ( Ä) ถูกจัดให้มีการนับเช่น(ฉันคิดว่า) มันจะลบบรรทัดปัจจุบันก่อนที่จะวางnเวลาดังนั้นจึงปรากฏเฉพาะต่อท้ายn - 1สำเนาเท่านั้น

ò         | recursively...
 ï        | . append newline
  ç       | . globally search lines matching...
   $îî    | . . compressed version of $\n\n regex
      /6Ä | . . duplicate to create 6 copies
H         | . go to first line
 l        | . move cursor right 1 char
          | . . if current line is 1 char long, errors out of recursion
  $x      | . delete 1 char from end of current line
    ò     | ...end
     x    | delete extra 1-char substring
      ú   | sort so that newlines rise to top


1

Perl 6 , 25 ไบต์

{(1..*X*5)RZxx[\~] .comb}

ลองออนไลน์!

บล็อกโค้ดแบบไม่ระบุชื่อที่ส่งคืนรายการของสตริง

หากคุณต้องการให้มันเป็นอาร์เรย์ 1D คุณสามารถต่อท้ายflatดังนี้:

{flat (1..*X*5)RZxx[\~] .comb}

ลองออนไลน์!

คำอธิบาย:

{                       }  # Anonymous code block
                   .comb   # Split the string into a list of characters
              [\~]         # Triangular reduce the list of characters with the concatenate operator
          RZxx             # Multiply each list by:
 (1..*X*5)                 # A sequence of 5,10,15 etc.

อีกวิธีหนึ่งคือ

{($+=5)xx*RZxx[\~] .comb}

ลองออนไลน์!

ใช้ได้กับจำนวนไบต์เดียวกันด้วย


1

Japt, 10 ไบต์

รอการยืนยันว่ารูปแบบเอาต์พุตเป็นที่ยอมรับหรือไม่ (+2 ไบต์ถ้าไม่ใช่)

å+ £T±5 ÇX

ลองมัน


ผลลัพธ์ดูสมเหตุสมผลสำหรับฉันทำได้ดีมาก
นิตย์


1

JavaScript, 76 ไบต์

s=>{for(i=1;i<=s.length;i++)for(j=0;j<5*i;j++)console.log(s.substring(0,i))}

f=s=>{for(i=1;i<=s.length;i++)for(j=0;j<5*i;j++)console.log(s.substring(0,i))}

f("cat")


สวัสดีและยินดีต้อนรับสู่ PPCG
Jonathan Frech

i=1;i<=s.length;i++i=0;++i<=s.length;สามารถ
Jonathan Frech

1

Forth (gforth) , 48 ไบต์

: f 1+ 1 do i 5 * 0 do dup j type cr loop loop ;

ลองออนไลน์!

คำอธิบาย

  1. วนซ้ำตั้งแต่ 1 ถึงความยาวสตริง
  2. สำหรับการทำซ้ำแต่ละครั้ง:
    1. เวลาของลูป (5 * ดัชนีลูป)
    2. พิมพ์สตริงตั้งแต่ต้นจนถึงดัชนีรอบนอก

รหัสคำอธิบาย

: f                \ start a new word definiton
  1+ 1             \ set up to the loop paramers from 1 to str-length
  do               \ start a counted loop
    i 5 * 0 do     \ start a second counted loop from 0 to 5*index - 1
      dup j        \ duplicate the string address and set the length to the outer index
      type         \ print character from start of string to loop index
      cr           \ output a newline
    loop           \ end inner counted loop
  loop             \ end outer counted loop
;                  \ end word definition

1

Java 10, 120 92 90 89 ไบต์

s->{for(int j=1,i=1;i<=s.length();i+=++j>i*5?j=1:0)System.out.println(s.substring(0,i));}

-28 ไบต์ขอบคุณที่@ OlivierGrégoire
-1 ไบต์ขอบคุณที่@ceilingcat

ลองออนไลน์

คำอธิบาย:

s->{                      // Method with String parameter and no return-type
  for(int j=1,            //  Repeat-integer, starting at 1
      i=1;i<=s.length()   //  Loop `i` in the range [1,length_input]
      ;                   //    After every iteration:
       i+=++j>i*5?        //     Increase `j` by 1 first with `++j`
                          //     If `j` is now larger than `i` multiplied by 5:
           j=1            //      Increase `i` by 1, and reset `j` to 1
          :               //     Else:
           0)             //      Leave `i` the same by increasing it with 0
    System.out.println(   //   Print with trailing newline:
      s.substring(0,i));} //    The prefix of size `i`

1
92 ไบต์ :s->{for(int i=1,j=1;i<=s.length();i+=j++<i*5?0:+(j=1))System.out.println(s.substring(0,i));}
Olivier Grégoire

@ OlivierGrégoireขอบคุณ! และฉันได้รับสามารถที่จะเล่นกอล์ฟ 2 ไบต์มากขึ้นโดยการเปลี่ยนการใช้>=และการ?j=1:0แทนและ< ?0:+(j=1)
Kevin Cruijssen

ดี! ฉันพยายามกำจัดมัน แต่ฉันยังคงมีปัญหาในการรวบรวม ไม่ได้คิดเกี่ยวกับการคืนสภาพ ทำได้ดี! ;)
Olivier Grégoire

@ceilingcat ขอบคุณ
Kevin Cruijssen

1

brainfuck , 40 ไบต์

++++++++++>,[>>+++++[<<[<]>[.>]>>+<-]<,]

ลองออนไลน์!

[Tape: 10 (newline), [characters], 0, rowcounter]

++++++++++> 10 (newline)
,[          for each input character
  >>+++++     add 5 to number of rows
  [           for each row
    <<[<]       go to start
    >[.>]       print newline and all previous characters
    >>+         add 1 to next rowcounter cell
    <-          decrement current rowcounter cell
  ]
  <,          input next character
]

1

APL (Dyalog Unicode) , 14 ไบต์SBCS

{↑(5×⍳≢⍵)/,\⍵}

ลองออนไลน์!

apl โพสต์แรกของฉันดังนั้นโปรดแจ้งให้เราทราบหากคุณมีข้อเสนอแนะ

มันทำงานอย่างไร:

{↑(5×⍳≢⍵)/,\⍵}
          ,\⍵  - Prefixes of the input
         /      - Repeated
     ⍳≢⍵        - By a list of indices the same length as the input
   5×           - Times 5
               - Separate into rows         

ไม่ได้จริงๆเฉพาะกิจเป็นแถวแต่รวม [รายชื่อของรายการ] เป็นแถว [ของเมทริกซ์]หรือมากกว่าในทางเทคนิคเพิ่มอันดับที่ค่าใช้จ่ายของความลึก
อดัม

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