ストリングスの塔


22

テキストの文字列が与えられたら、それを「タワー」として出力します。

(の形式の0:n)文字列の各スライスが繰り返される5*nので、最初の文字が5回繰り返され、最初と2番目の文字が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"],...]か?
シャギー

3
先頭または末尾の改行を含む出力は受け入れられますか?入力に改行が含まれていないと想定できますか?
冗長性

回答:


12

R、48バイト

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

オンラインでお試しください!

文字列のリストを返します。


ここで明らかなゴルフを見逃していました!良い解決策私はさまざまなアプローチを試しましたが、これまでのところすべてがこれよりはるかに長くなっています。
JayCe

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それに気づいてくれてありがとう!私は最初にコーヒーなしで午前中にゴルフをするべきではありません:-(
カルド

1
ランレングスデコーディングを使用すると、3つのバイトを保存しますηā5*ÅΓ
アドナン・

@Adnan Brilliant、ありがとう!独自の答えに値すると思いますが、バイトカウントを33%削減しました...自分で投稿することにした場合は、元のソリューションに戻ります。
カルド

素敵なもの、私はηvyg5*Fy=8のために持っていた
マジックタコ



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*$($>`¶

$`一致のプレフィックスです。Retinaは2つの修飾子を提供>し、連続する一致の間の文字列のコンテキストにあるように修正します.が、長さはかかります。したがって、接尾辞の接頭辞から始めます。これは、接頭辞を含む一致に相当します。これにより、重複する一致を使用して2バイトを節約できます。次に$(、それを改行で連結し5*、それを$.>`繰り返し、さらにその長さで指定された回数だけ繰り返します。




6

Cubix 44  40バイト

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

オンラインでお試しください!

これにはまだ多くのノーオペレーションがありますが、以前より少し良くなっています。

非常に簡単な説明として、キャラクターは入力から取得され、EOI(-1)についてテストされます。その後、スタックが反転されます。スタック上のアイテム数と-5の倍数を取得します。それをスタックの一番下に落とし、クリーンアップします。スタックをループし、負の数になるまで印刷します。改行を印刷し、数値をインクリメントします。0の場合はゼロをドロップし、スタックを反転して入力から再び開始します。

ように見える

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

オンラインで見る



5

JavaScript、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

lengthの文字列にはnn*(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

、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バイトの方が長いです。

編集:@BWOのおかげで-1バイト。


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

PowerShell40 20 25バイト

AdmBorkBorkが仕様を指摘してくれたおかげで、+ 5バイトの驚異的なおかげでスコアが半分に削減されました。

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

オンラインでお試しください!

スプラッティングを介して入力を受け取ります。次の文字を自分自身に追加して文字列を作成し、それを1つの要素の配列に変換して、それを繰り返し5*iます。



@mazzy Dang、char自体の代わりにインデックスを保存しようとすると、私は迷いました。ありがとう。
ヴェスカ

@AdmBorkBorkハハ、おっと。今すぐ修正する必要があります
ヴェスカー

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íîî/ò

改行なしの入力を期待しますが、出力は先頭と末尾の改行が1つだけです。

説明

異なる部分文字列は2つの連続した改行で区切られているため、行ごとの複製は正規表現に一致する行にのみ適用され$\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

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

@OlivierGrégoireに感謝-28バイト。@ceilingcatの
おかげで-1バイト。

オンラインでお試しください。

説明:

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));}
オリビエグレゴワール

@OlivierGrégoireありがとう!そして>=、andの?j=1:0代わりに<and を使用することで、さらに2バイトのゴルフをすることができました?0:+(j=1)
ケビンCruijssen

良い!私はそれを取り除こうとしていましたが、私はコンパイルの問題を抱え続けていました。状態を元に戻すことを考えませんでした。よくやった!;)
オリビエグレゴワール

@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.