Kule dizeleri


22

Bir metin dizesi verildiğinde, metni bir 'kule' olarak verin.

Dizenin (formun 0:n) her dilimi tekrarlanır 5*n, böylece ilk karakter 5 kez, daha sonra ilk ve ikinci 10 kez vb.

Örnekler:

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

Kurallar:

Her katmanı bir karakter listesi veya yalnızca bir dizesini bir araya getirerek çıktılayabilirsiniz.


1
PPCG'ye hoş geldiniz! Güzel bir meydan okuma.
Giuseppe

Biçimlendirmeyi temizlemeye ve meydan okumayı biraz daha iyi açıklamaya çalıştım. Zorluğu anladım mı?
Rɪᴋᴇʀ

2
Girdiyi bir karakter listesi olarak alabilir miyiz?
JayCe

5
2D dizelerin dizisini şu şekilde çıktı alabilir miyiz [["c","c","c","c","c"],["ca","ca","ca","ca","ca","ca","ca","ca","ca","ca"],...]?
Shaggy

3
Baştaki veya sondaki yeni satırlara sahip çıktılar kabul edilebilir mi? Girdilerin yeni satır içermediğini varsayabilir miyiz?
fazlalık

Yanıtlar:


12

R , 48 bayt

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

Çevrimiçi deneyin!

Dizelerin bir listesini döndürür.


Burada bariz golf kaçırmıştı! güzel bir çözüm farklı yaklaşımlar denedim ama şimdiye kadar hepsi bundan çok daha uzun.
JayCe

9

05AB1E , 6 bayt

ηā5*ÅΓ

Çevrimiçi deneyin!

Bir dize listesi döndürür.

açıklama

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

@KevinCruijssen Bunu fark ettiğiniz için teşekkürler! Sabahları kahve olmadan golf yapmamalıyım :-(
Kaldo

1
Çalışma uzunluğu kod çözme özelliğini kullanmak 3 bayt tasarrufu sağlar:ηā5*ÅΓ
Adnan

@Adnan Brilliant, teşekkürler! Sanırım kendi cevabını hak ediyor, bayt sayısını% 33 oranında azalttınız ... Eğer kendiniz göndermeye karar verirseniz orijinal çözümüme geri döneceğim.
Kaldo

Güzel bir, ηvyg5*Fy=8 için vardı .
Sihirli Ahtapot Urn



6

TI-Basic (TI-84 Plus CE), 29 bayt (27 jeton)

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

Açıklama:

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 bayt

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

Çevrimiçi deneyin! Bağlantı, test senaryolarını içerir. Açıklama:

.

Dizedeki her karakteri eşleştirin.

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

$`eşleşmenin önekidir. Retina daha sonra iki değiştirici sağlar, >ardışık eşleşmeler arasındaki dize bağlamında değiştirir ., uzunluğunu alır. Bu nedenle, önek dahil eşleşmeye eşdeğer olan sonekin önekiyle başlıyoruz. Bu, çakışan eşleşmeleri kullanarak 2 bayt tasarruf sağlar. $(Daha sonra bitiştirir bir yeni satır ile 5*tekrarlar bu ve $.>`tekrarlar onun uzunluğu ile belirlenir zamanların bir başka dizi.


6

Tuval , 6 bayt

[³5×*P

Burada deneyin!

Açıklama:

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


6

Cubix ,  44  40 bayt

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

Çevrimiçi deneyin!

Bu hala çok sayıda operasyona sahip değil, ama öncekinden biraz daha iyi.

Çok kısa bir açıklama olarak, bir karakter girişten alınır ve EOI (-1) için test edilir, eğer durursa. Daha sonra yığın ters çevrilir. Yığındaki öğelerin sayısını ve -5 ile birden çok öğeyi alın. Bunu yığının altına bırakın ve temizleyin. Negatif bir sayıya kadar yığının içinden geçerek yazdırın. Yeni satır yazdırın, sayıyı artırın, 0 sıfırı düşürürse, ters yığını ve girişten tekrar başlayın, aksi takdirde yığından geçerek, negatif bir sayıya kadar yazdırın ... ad nauseum

Cubified gibi görünüyor

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

Çevrimiçi izleyin



5

JavaScript, 48 46 bayt

(teşekkürler @redundancy)

Edit: Yazar açıkladı ve bu cevap şimdi geçerli değil, ama burada değişmeden bırakacağım.

Çok satırlı dizelerden oluşan bir dizi döndürür.

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

Dene

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

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

Potansiyel strateji:

Bana çok yardımcı olmadı, ama belki birisi bunu kullanabilir:

(0-endeksli) hattında karakter sayısı iolduğu floor(sqrt(2/5*i+1/4)+1/2)kadar JavaScript golfed olan, (.4*i+.25)**.5+.5|0.

Bir uzunluk dizesi niçin n*(n+1)*5/2çizgiler vardır.

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


1
Çıktı biçiminizin meydan okumaya göre geçerli olduğunu varsayarsak, burada gösterildiği gibi 2 bayt kaydedebilirsiniz: Çevrimiçi deneyin!
fazlalık



3

Kabuk , 8 bayt

ΣzoR*5Nḣ

Çevrimiçi deneyin!

açıklama

Σ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 bayt

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

Çevrimiçi deneyin!

Ne yazık ki initsgerektirir import Data.List, bu yüzden

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

45 bayt ile daha uzun.

Düzenleme: @BWO sayesinde -1 bayt.


3

Kömür , 11 bayt

F⊕LθE×⁵ι…θι

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Çıktı, sıfır uzunlukta alt dizenin 0 tekrarını içerir. Açıklama:

   θ          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 bayt

AdmBorkBork teknik özellikleri gösteren mazzy +5 bayt sayesinde skor yarıya indirildi

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

Çevrimiçi deneyin!

Sıçrama yoluyla girdi alır. Bir sonraki karakteri kendisine ekleyerek dizeyi oluşturarak çalışır, onu bir öğe dizisine dönüştürür ve sonra tekrar eder 5*i.


1
paramçok pahalı. Bundan kaçınmaya çalışın
mazzy

@mazzy Dang, karakterin kendisi yerine endeksi kurtarmaya çalışmak beni saptırdı. Teşekkürler.
Veskah

@AdmBorkBork Ha ha, whoops. Şimdi düzeltilmelidir
Veskah

2

MATL , 12 bayt

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

Çevrimiçi deneyin!

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 bayt

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

Yeni satırlar olmadan girdiler ve gereksiz lider satırlar ile çıktılar bekler.

Giriş / çıkış sorgulama özelliklerini ihlal ediyorsa bu girişi kaldırabilirim.

Çevrimiçi deneyin!

21 bayt

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

Yeni satırlar olmadan girdi bekler, ancak yalnızca bir satır başı ve sondaki satırsonu ile çıktılar bekler.

açıklama

Farklı alt dizeler, ardışık iki yeni satırla ayrılır, böylece doğrusal çoğaltma yalnızca normal ifadeyle eşleşen satırlar için geçerlidir $\n\n.

Çoğaltma komutu ( Ä) bir sayı sağlandığında, örneğin , (sanırım) nsüreleri yapıştırmadan önce geçerli satırı siler , böylece yalnızca n - 1kopyalar eklenir .

ò         | 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

2

APL (Dyalog Unicode) , 14 bayt SBCS

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

Çevrimiçi deneyin!

İlk apl yayınım bu yüzden herhangi bir öneriniz varsa lütfen bana bildirin

Nasıl çalışır:

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

gerçekten satırlara ayırmayın, daha ziyade [listelerin listesini] bir matrisin satırlarına birleştirin veya daha teknik olarak Sıralamayı derinlik pahasına artırın .
Adam


1

Perl 6 , 25 bayt

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

Çevrimiçi deneyin!

Dizelerin listesini döndüren anonim kod bloğu.

Bir 1D dizisi olarak istiyorsanız, flatönüne şu şekilde ekleyebilirsiniz :

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

Çevrimiçi deneyin!

Açıklama:

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

Alternatif olarak,

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

Çevrimiçi deneyin!

Aynı miktarda bayt için de çalışır.


1

Japt, 10 bayt

Çıktı formatının kabul edilebilir olup olmadığına dair onay bekleniyor (değilse +2 bayt).

å+ £T±5 ÇX

Dene


Çıktı benim için makul görünüyor, güzel yapılmış.
Nit


1

JavaScript, 76 bayt

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


Merhaba ve PPCG'ye hoş geldiniz.
Jonathan Frech

i=1;i<=s.length;i++olabilir i=0;++i<=s.length;.
Jonathan Frech

1

İleri (gforth) , 48 bayt

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

Çevrimiçi deneyin!

açıklama

  1. 1'den dize uzunluğuna döngü
  2. her yineleme için:
    1. Döngü (5 * döngü indeksi) süreleri
    2. Dizeyi başlangıçtan dış döngü dizinine yazdır

Kod Açıklaması

: 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 bayt

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

@ OlivierGrégoire sayesinde -28 bayt . @Ceilingcat
sayesinde -1 bayt .

Çevrimiçi deneyin.

Açıklama:

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 bayt :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 Teşekkürler! Ve kullanarak değiştirerek golf 2 daha bayt mümkün oldum >=ve ?j=1:0yerine <ve ?0:+(j=1).
Kevin Cruijssen

İyi! Ondan kurtulmaya çalışıyordum, ama derleme sorunları yaşamaya devam ettim. Durumu geri almayı düşünmedim. Aferin! ;)
Olivier Grégoire

@ceilingcat Teşekkürler
Kevin Cruijssen

1

brainfuck , 40 bayt

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

Çevrimiçi deneyin!

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.