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.


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.


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]

@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

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

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.


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


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



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


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



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

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.


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


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.


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

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 6Ä, (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


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.


1

Japt, 10 byte

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

å+ £T±5 ÇX

Cobalah


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


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

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`

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
]

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         

↑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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.