Menara senar

22

Diberikan string teks, output sebagai 'menara'.

Setiap irisan string (bentuk 0:n) diulang 5*nkali, jadi karakter pertama diulang 5 kali, lalu yang pertama dan yang kedua 10 kali, dll.

Contoh:

'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']  

Aturan:

Anda dapat menampilkan setiap layer sebagai daftar karakter atau hanya serangkaian yang digabungkan bersama.

Whalalalalalala CHen
sumber
selamat datang di PPCG! Tantangan yang bagus.
Giuseppe
Saya mencoba untuk membersihkan format dan menjelaskan tantangannya sedikit lebih baik. Apakah saya mengerti tantangannya, kan?
Rɪᴋᴇʀ
2
Bisakah kita mengambil input sebagai daftar karakter?
JayCe
5
Bisakah kita output 2D-array dari string suka begitu: [["c","c","c","c","c"],["ca","ca","ca","ca","ca","ca","ca","ca","ca","ca"],...]?
Shaggy
3
Apakah hasil dengan baris baru memimpin atau mengikuti dapat diterima? Bisakah kita menganggap input tidak mengandung baris baru?
redundansi

Jawaban:

12

R , 48 byte

function(s)substring(s,1,rep(x<-1:nchar(s),x*5))

Cobalah online!

Mengembalikan daftar string.

Giuseppe
sumber
Saya telah melewatkan golf yang jelas di sini! solusi yang bagus Saya mencoba pendekatan yang berbeda tetapi sejauh ini semuanya jauh lebih lama dari ini.
JayCe
8

05AB1E , 6 byte

ηā5*ÅΓ

Cobalah online!

Mengembalikan daftar string.

Penjelasan

     ÅΓ # Run-length decode...
η       # ... the prefixes of the input
 ā5*и   # ... with the length range multiplied by 5 -- [5, 10, 15, 20, 25]
Kaldo
sumber
@KevinCruijssen Terima kasih telah memperhatikan itu! Saya seharusnya tidak bermain golf di pagi hari tanpa kopi terlebih dahulu :-(
Kaldo
1
Menggunakan run length decoding menghemat 3 byte:ηā5*ÅΓ
Adnan
@ Adnan Brilliant, terima kasih! Saya pikir itu pantas jawabannya sendiri, Anda telah mengurangi jumlah byte sebesar 33% ... Saya akan kembali ke solusi asli saya jika Anda memutuskan untuk mempostingnya sendiri.
Kaldo
Bagus, saya punya ηvyg5*Fy=untuk 8.
Magic Gurita Guci
6

Stax , 8 byte

äï▄;♫├W^

Jalankan dan debug itu

Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.

|[F for each prefix of the input
  i^5*  5*(i+1) where i is the iteration index
  DQ    that many times, peek and print to output

Jalankan yang ini

rekursif
sumber
6

TI-Basic (TI-84 Plus CE), 29 byte (27 token)

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

Penjelasan:

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
pizzapants184
sumber
6

Retina , 15 byte

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

Cobalah online! Tautan termasuk kasus uji. Penjelasan:

.

Cocokkan setiap karakter dalam string.

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

$`adalah awalan pertandingan. Retina kemudian menyediakan dua pengubah, >memodifikasinya untuk berada dalam konteks string antara pertandingan yang berurutan, sambil .memakan waktu. Karena itu kami mulai dengan awalan suffix, yang setara dengan pertandingan termasuk awalannya. Ini menghemat 2 byte daripada menggunakan pertandingan yang tumpang tindih. Yang $(kemudian menyimpulkan bahwa dengan baris baru, 5*mengulanginya, dan kemudian $.>`mengulanginya lagi beberapa kali karena panjangnya.

Neil
sumber
6

Kanvas , 6 byte

[³5×*P

Coba di sini!

Penjelasan:

[      for each prefix
 ³5×     1-indexed counter * 5
    *    repeat the prefix vertically that many times
     P   and print that
dzaima
sumber
6

Brachylog , 15 byte

a₀ᶠ⟨gj₎{l×₅}⟩ᵐc

Cobalah online!

Final cdapat dihapus jika OP menjawab positif pertanyaan tentang mengeluarkan array 2D.

sundar - Pasang kembali Monica
sumber
6

Cubix ,  44  40 byte

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

Cobalah online!

Ini masih memiliki banyak no-ops, tetapi ini sedikit lebih baik dari sebelumnya.

Sebagai deskripsi yang sangat singkat, karakter diambil dari input dan diuji untuk EOI (-1), berhenti jika ada. Tumpukan kemudian dibalik. Dapatkan jumlah item di tumpukan dan beberapa dengan -5. Jatuhkan ke bagian bawah tumpukan dan bersihkan. Loop melalui tumpukan, mencetak, hingga angka negatif. Cetak baris baru, tambah angkanya, jika 0 jatuhkan nol, balikkan tumpukan, dan mulai dari input lagi, jika tidak lewati tumpukan, cetak, hingga angka negatif ... ad nauseum

Kubus sepertinya

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

Tonton secara online

MickyT
sumber
5

JavaScript, 48 46 byte

(terima kasih @redundancy)

Sunting: Penulis mengklarifikasi dan jawaban ini sekarang tidak valid, tetapi saya akan membiarkannya di sini tidak berubah.

Mengembalikan array string multi-line.

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

Cobalah

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

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

Strategi potensial:

Itu tidak banyak membantu saya, tetapi mungkin seseorang dapat menggunakan ini:

Jumlah karakter pada baris (0-diindeks) iadalah floor(sqrt(2/5*i+1/4)+1/2), yang di-golf dalam JavaScript sebagai (.4*i+.25)**.5+.5|0.

Untuk untaian panjang n, ada n*(n+1)*5/2garis.

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

MattH
sumber
1
Dengan asumsi format output Anda valid sesuai dengan tantangan, Anda dapat menyimpan 2 byte seperti yang ditunjukkan di sini: Coba online!
redundansi
4

Python 3 , 43 41 byte

Berkat ovs untuk menghemat 2 byte!

Kode

f=lambda x:[*x]and f(x[:-1])+[x]*5*len(x)

Cobalah online!

Adnan
sumber
3

Sekam , 8 byte

ΣzoR*5Nḣ

Cobalah online!

Penjelasan

Σ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"]
ბიმო
sumber
3

Haskell, 46 43 42 byte

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

Cobalah online!

Sedih initsmembutuhkan import Data.List, jadi

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

dengan 45 byte lebih panjang.

Sunting: -1 byte terima kasih kepada @BWO.

nimi
sumber
3

Arang , 11 byte

F⊕LθE×⁵ι…θι

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Output mencakup 0 repetisi dari substring panjang nol. Penjelasan:

   θ          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
Neil
sumber
3

PowerShell , 40 20 25 byte

Skor memotong setengah berkat mazzy
+5 byte berkat AdmBorkBork menunjukkan spesifikasi

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

Cobalah online!

Mengambil input melalui splatting. Bekerja dengan membangun string dengan menambahkan karakter berikutnya ke dirinya sendiri, mengubahnya menjadi array elemen satu, dan kemudian mengulanginya 5*ikali.

Veskah
sumber
1
paramsangat mahal. Cobalah untuk menghindarinya
mazzy
@ Malzy Dang, mencoba untuk menyimpan indeks, bukan arang itu sendiri membuat saya tersesat. Terima kasih.
Veskah
@ AdmBorkBork Ha ha, ups. Harus diperbaiki sekarang
Veskah
2

MATL , 12 byte

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

Cobalah online!

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
sundar - Pasang kembali Monica
sumber
2

V , 17 byte

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

Mengharapkan input tanpa baris baru, dan output dengan baris baru terkemuka berlebihan.

Saya dapat menghapus entri ini jika input / output melanggar spesifikasi tantangan.

Cobalah online!

21 byte

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

Mengharapkan input tanpa baris baru, tetapi output dengan hanya satu baris baru yang memimpin dan tertinggal.

Penjelasan

Substring yang berbeda dipisahkan dengan dua baris baru berturut-turut sehingga duplikasi garis hanya berlaku untuk garis yang cocok dengan regex $\n\n .

Ketika perintah duplikasi ( Ä) diberikan hitungan, misalnya , (saya pikir) itu menghapus baris saat ini sebelum menyisipkan nwaktu, sehingga hanya muncul untuk menambahkan n - 1salinan.

ò         | 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
redundansi
sumber
1

Perl 6 , 25 byte

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

Cobalah online!

Blok kode anonim yang mengembalikan daftar daftar string.

Jika Anda menginginkannya sebagai array 1D, Anda dapat menambahkan flatdi depan seperti:

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

Cobalah online!

Penjelasan:

{                       }  # 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.

Kalau tidak,

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

Cobalah online!

Juga berfungsi untuk jumlah byte yang sama.

Jo King
sumber
1

Japt, 10 byte

Menunggu konfirmasi apakah format output dapat diterima (+2 byte jika tidak).

å+ £T±5 ÇX

Cobalah

Shaggy
sumber
Output terlihat masuk akal bagi saya, dilakukan dengan baik.
Nit
1

JavaScript, 76 byte

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")

Medude
sumber
Halo dan selamat datang di PPCG.
Jonathan Frech
i=1;i<=s.length;i++bisa i=0;++i<=s.length;.
Jonathan Frech
1

Keempat (gforth) , 48 byte

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

Cobalah online!

Penjelasan

  1. Ulangi dari 1 hingga panjang string
  2. untuk setiap iterasi:
    1. Loop (5 * loop index) kali
    2. Cetak string dari awal hingga indeks lingkaran luar

Penjelasan Kode

: 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
reffu
sumber
1

Java 10, 120 92 90 89 byte

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 byte terima kasih kepada @ OlivierGrégoire .
-1 byte terima kasih kepada @ceilingcat .

Cobalah online.

Penjelasan:

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`
Kevin Cruijssen
sumber
1
92 byte :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 Terima kasih! Dan saya sudah bisa bermain golf 2 byte lebih banyak dengan mengubah menggunakan >=dan ?j=1:0bukannya <dan ?0:+(j=1).
Kevin Cruijssen
Baik! Saya mencoba untuk menyingkirkannya, tetapi saya terus mengalami masalah kompilasi. Tidak berpikir tentang mengembalikan kondisi. Sudah selesai dilakukan dengan baik! ;)
Olivier Grégoire
@ceilingcat Terima kasih
Kevin Cruijssen
1

brainfuck , 40 byte

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

Cobalah online!

[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
]
Dorian
sumber
1

APL (Dyalog Unicode) , 14 byte SBCS

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

Cobalah online!

Posting apl pertama saya jadi tolong beri tahu saya jika Anda memiliki saran

Bagaimana itu bekerja:

{↑(5×⍳≢⍵)/,\⍵}
          ,\⍵  - Prefixes of the input
         /      - Repeated
     ⍳≢⍵        - By a list of indices the same length as the input
   5×           - Times 5
               - Separate into rows         
jujur
sumber
tidak benar-benar Pisahkan ke dalam baris melainkan Gabungkan [daftar daftar] menjadi baris [dari sebuah matriks] , atau lebih secara teknis Tingkatkan peringkat dengan mengorbankan kedalaman .
Adám