출장 끈 사다리


12

문자열 s과 양의 정수가 주어지면 N, 복제 될 때까지 각 문자를 점점 더 많이 N복제 한 다음 문자가 끝에서 멀어 N질 때까지 복제본 을 유지 N한 다음 다시 내려갑니다.

예를 들어 given abalone3:

a    we start with 1 copy
bb   then 2 copies
aaa  then 3 copies, which is our second parameter
lll  so we continue using 3 copies
ooo  until we reach the end
nn   where we use 2 copies
e    and then finally 1 copy

결과는입니다 abbaaalllooonne.

문자열의 길이는 ~보다 길고 ~의 2N문자 만 보장 a됩니다 z.

더 많은 테스트 사례 :

N string       output
2 aaaaa        aaaaaaaa
3 abcdabcdabcd abbcccdddaaabbbcccdddaaabbbccd

이것은 입니다. 바이트 단위의 최단 답변이 이깁니다. 표준 허점이 적용됩니다.

답변:


11

젤리 , 6 바이트

JṡFṢị⁸

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

작동 원리

JṡFṢị⁸  Main link. Arguments: s (string), n (integer)

J       Get the indices of s.
 ṡ      Split the indices into overlapping chunks of length n.
  F     Flatten the array of chunks.
   Ṣ    Sort the resulting array of indices.
    ị⁸   Get the characters of s at these indices.

샘플 런

JṡFṢị⁸  "abalone", 3

J       [1, 2, 3, 4, 5, 6, 7].
 ṡ      [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]]
  F     [1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6, 5, 6, 7]
   Ṣ    [1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7]
    ị⁸  "abbaaalllooonne"

3
그 split + flatten + sort 방법은 순수한 천재입니다. 좋은! :)
HyperNeutrino

7

파이썬 2 , 57 바이트

f=lambda s,n,i=1:s and s[0]*len(s[:i][:n])+f(s[1:],n,i+1)

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

또한 57 :

파이썬 2 , 57 바이트

f=lambda s,n,i=1:s and s[0]*len(s[:i])+f(s[1:],n,i+(i<n))

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


당신의 논리 뒤에 설명 할 수 있습니까 len(s[:i][:n])? 그 번호를 얻는 더 짧은 방법이 있다고 확신하지만 어떻게 해야할지 모르겠습니다.
musicman523

신경 쓰지 마, 알았어! 그러나 1 바이트보다 짧습니다 min(len(s),i,n). 잘 했어!
musicman523

6

자바 스크립트 (ES6), 67 65 바이트

-2 덕분 바이트 의 Chas 브라운의 짧은 방법을 사용하여 min().

s=>n=>s.replace(/./g,(c,i)=>c.repeat(Math.min(i+1,s.length-i,n)))

카레 구문으로 입력을 f("abalone")(3)받습니다 : .

테스트 스 니펫

f=
s=>n=>s.replace(/./g,(c,i)=>c.repeat(Math.min(i+1,s.length-i,n)))
<div oninput="O.value=f(S.value)(+N.value)">String: <input id=S> N: <input id=N size=3></div>Out: <input id=O size=50 disabled>


6

젤리 , 8 7 바이트

J««U$⁸x

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

작동 원리

J««U$⁸x - main link, input e.g. abalone
J        - range of length of letters: [1,2,3,4,5,6,7]
 «       - minimum of each term with second input: [1,2,3,3,3,3,3]
  «U$    - termwise minimum with the reverse: 
                    min([1,2,3,3,3,3,3],[3,3,3,3,3,2,1])=[1,2,3,3,3,2,1]
     ⁸x  - repeat each character of the input a number of times corresponding to elements:
                    a*1;b*2;a*3...e*1 = abbaaalllooonne

@LeakyNun 덕분에 -1 바이트


@LeakyNun을 찾아보세요! 그 방향으로 얻은 가장 가까운 것은 J«¥@«U$x@9 바이트입니다.
fireflame241

설명해주세요
동지 SparklePony

@ fireflame241는 genenrally, x@⁸에 equivallent이다 ⁸x(내가 사용 여기에)
새는 수녀

2

하스켈 , 61 60 바이트

1 바이트를 줄이는 데 도움을 준 @Laikoni에게 감사드립니다.

n#s=do(i,c)<-zip[1..]s;replicate(minimum[n,i,length s-i+1])c

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

언 골프 드 :

(#) n string = do
    (i, char) <- zip [1..] string
    replicate (minimum [n, i, length(string)-i+1]) char

(A)의 위대한 사용 do블록! 에 괄호를 넣어 바이트를 저장하십시오 length(s).
Laikoni

1

하스켈 (Lambdabot), 74 바이트

r=replicate
f x n=join$zipWith r([1..n]++r(length x-2*n)n++reverse[1..n])x

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


수입은 점수에 포함됩니다! 당신과 함께 더 나은 것>>=id
bartavelle

그래, 나도 그 전에를했고, 그 다음 내가 본 (즉, 괄호 Lambdabot이 이유의). 올바른 방법은 무엇입니까?
ბიმო

나는 정정했다, 나는 이것이 옳다고 생각한다!
bartavelle

이 목록에는 매우 편리한 수입품이 많이 있습니다.
ბიმო

1

J, 24 바이트

(<.&n<./(|.,:[)>:i.#s)#s

parens의 비트-- 다음과 같이 배열을 (<.&n<./(|.,:[)>:i.#s)만듭니다 1 2 ... n n n ... 2 1.

                   #s    length of s, call it L
                 i.      numbers 0 1 ... L-1
               >:        increment by 1, now 1 2 ... L
        (|.,:[)          fork: |. = reverse, ,: = stack, [ = identity
                         resulting in  L ... 2 1
                                       1 2 ... L 
     <./                 min of each element of the top and bottom row
 <.&n                    min of each resulting elm and n

일단 우리가 그것을 얻으면 J의 #연산자는 자동으로 요청한 것을 자동으로 수행하여 지정된 횟수만큼 각 요소를 복제합니다.

J 전문가의 개선 사항이 궁금합니다.


상당히 다른 접근 방식의 23 바이트 [#~#@[$([:>:<:,&:i.-)@](미묘한 공간이 생길 수 있습니다). 나는 갈고리가 왜 x걸리지 않지만 돌봐야 할 지위에 있지 않은지에 대해 상실하고 있습니다.
cole


1

Japt , 11 10 바이트

ËpVm°TEnUÊ

그것을 테스트


설명

문자열의 암시 적 입력 U및 정수 V.

Ë

U모든 캐릭터를 매핑 하고 교체하십시오.

Vm

의 최소값을 얻으십시오 V...

°T

T(초기 0) 1 씩 증가 ...

EnUÊ

그리고 현재 문자의 색인 ( E)에서 ( n)의 길이 ( Ê)를 뺍니다 U.

p

현재 문자를 여러 번 반복하십시오.

최종 문자열을 내재적으로 출력합니다.



0

파이썬 2 68 바이트

f=lambda s,n:''.join(s[i]*min(i+1,len(s)-i,n)for i in range(len(s)))

f=대답에 필요하지 않습니다 . 이 함수는 익명 일 수 있습니다. 이를 염두에두고를 사용하여 3 바이트를 제거 할 수 있습니다 lambda s,n:''.join(c*min(i+1,len(s)-i,n)for i,c in enumerate(s)).
notjagan

0

껍질 , 10 9 바이트

₁₁ṀR
↔z↑N

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

첫 번째 줄은 주요 기능이며 각 문자를 n 번 반복 한 다음 두 번째 줄을 두 번 호출합니다.

두 번째 줄은 반복되는 각 문자 그룹에서 최대 N 개의 문자를 가져옵니다. 여기서 N은 그룹의 1 기반 인덱스이며 목록을 반대로합니다.



0

APL (Dyalog) , 15 바이트

{⍵/⍨⍺⌊i⌊⌽i←⍳≢⍵}

{} 왼쪽 인수 (cap)가 이고 오른쪽 인수 (string)가 ⍵ 인 함수 :

≢⍵ 문자열의 문자 수를 센다

 많은 생성 ɩ의 ntegers을

i←내가  저장

 역

i⌊i  와의 쌍별 최소

⍺⌊ 캡과 최소 한쌍

⍵/⍨ 이 숫자를 사용하여 문자열의 글자를 복제하십시오

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




0

전복은 일종의 물고기 (물론 조개류)입니다.

> <> , 79 바이트

&i1\
0(?\:1+:&::&@)?$~i:@
&~}\&~1
0(?\:&::1+&@)?$~}}:
 ~r\
?!v>l?!;:o$1-:@
~~<^

온라인으로 시도 하거나 물고기 놀이터 에서 시청하십시오 !

STDIN에서 문자열을 읽고 숫자가 이미 스택에 있다고 가정합니다.

설명 : 두 번째, 네 번째 및 여섯 번째 라인이 기본 루프입니다. 세부 사항은 추악한 스택 조작이지만 넓은 스트로크에서는 먼저 두 번째 줄이 입력 문자와 최소 문자 ( in )를 번갈아 가며 스택을 채 웁니다. 여기서 n 은 길이 캡이고 i 는 문자 색인 입력 : "전복", 3의 경우 스택은 다음과 같습니다.

"a", 1, "b", 2, "a", 3, "l", 3, "o", 3, "n", 3, "e", 3, -1=EOF, 3

다음으로, 라인 4는 같은 방식으로 스택을 거꾸로 진행하여 오른손 끝이 올바르게 캡핑되도록합니다.

"a", 1, "b", 2, "a", 3, "l", 3, "o", 3, "n", 2, "e", 1, -1

그런 다음 여섯 번째 줄은 각 문자-숫자 쌍을 취하여 숫자만큼 문자를 인쇄합니다.

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