문자열의 탑


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
선행 또는 후행 줄 바꿈이있는 출력이 허용됩니까? 입력에 줄 바꿈이 포함되어 있지 않다고 가정 할 수 있습니까?
중복성

답변:


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 감사합니다! 나는 커피없이 아침에 골프를해서는 안된다 :-(
Kaldo

1
실행 길이 디코딩을 사용하면 3 바이트가 절약됩니다.ηā5*ÅΓ
Adnan

@Adnan Brilliant, 감사합니다! 그래도 자체 답변을받을 가치가 있다고 생각합니다. 바이트 수를 33 % 줄였습니다 ... 내가 직접 게시하기로 결정하면 원래 솔루션으로 되돌릴 것입니다.
Kaldo

좋은 하나, 나는 ηvyg5*Fy=8을했다.
Magic Octopus Urn



6

TI 기본 (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 바이트가 절약됩니다. 그런 $(다음 줄 바꿈으로 5*그것을 연결하고 반복 한 다음 $.>`길이에 의해 주어진 횟수만큼 반복합니다.




6

Cubix ,  44  40 바이트

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

온라인으로 사용해보십시오!

이것은 여전히 ​​아니오가 없지만 이전보다 조금 낫습니다.

매우 간단한 설명으로, 입력에서 문자를 가져와 EOI (-1)에 대해 테스트 한 후 정지합니다. 그런 다음 스택이 뒤집 힙니다. 스택의 아이템 수와 -5를 곱한 값을 얻습니다. 스택 맨 아래로 떨어 뜨리고 청소하십시오. 음수가 될 때까지 인쇄하면서 스택을 반복합니다. 줄 바꿈을 인쇄하고 숫자가 0이면 0이 떨어지면 스택을 뒤집고 입력에서 다시 시작하십시오. 그렇지 않으면 스택을 반복하여 인쇄하고 음수가 될 때까지 인쇄하십시오

그것은 마치

      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

껍질 , 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

하스켈, 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 인 하위 문자열이 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 바이트

AdmBorkBork가 스펙을 지적함으로써 매기 +5 바이트 덕분에 점수가 반
으로 줄었습니다.

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

온라인으로 사용해보십시오!

스플래 팅을 통해 입력을받습니다. 다음 문자를 추가하여 문자열을 작성하고 한 요소 배열로 변환 한 다음 반복합니다 5*i.


1
param매우 비싸다. 피하십시오
매지

@mazzy Dang, char 대신 인덱스를 저장하려고하면 나를 잃어 버렸습니다. 감사.
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íîî/ò

줄 바꿈없이 입력을 예상하지만 하나의 선행 및 후행 줄 바꿈이있는 출력 만 예상합니다.

설명

다른 부분 문자열은 두 개의 연속적인 줄 바꿈으로 구분되므로 줄 단위 중복은 정규 표현식과 일치하는 줄에만 적용됩니다. $\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

펄 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

apt, 10 바이트

출력 형식이 허용 가능한지에 대한 확인을 기다리고 있습니다 (그렇지 않으면 +2 바이트).

å+ £T±5 ÇX

시도 해봐


출력이 나에게 합리적으로 보입니다.
Nit


1

자바 스크립트, 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

4 번째 (2 번째) , 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

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

실제로 행으로 분리되는 것이 아니라 [목록의 목록]을 [행렬의] 행으로 결합 하거나보다 기술적 으로 심도를 희생하여 순위를 높이십시오 .
Adám

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.