Escalera de cuerda con tapa

12

Dada una cadena sy un número entero positivo N, gradualmente duplique cada carácter más y más hasta que se Nduplique, y luego manténgase en los Nduplicados hasta que los Ncaracteres se alejen del final, luego vuelva a bajar.

Por ejemplo, dado abaloney 3:

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

y el resultado sería abbaaalllooonne.

Se garantiza que la cadena tiene una longitud mayor 2Ny solo tiene caracteres de aa z.

Más casos de prueba:

N string       output
2 aaaaa        aaaaaaaa
3 abcdabcdabcd abbcccdddaaabbbcccdddaaabbbccd

Este es el . La respuesta más corta en bytes gana. Se aplican lagunas estándar .

Monja permeable
fuente

Respuestas:

11

Jalea , 6 bytes

JṡFṢị⁸

Pruébalo en línea!

Cómo funciona

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.

Ejecución de la muestra

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"
Dennis
fuente
3
Ese método split + flatten + sort es puro genio. ¡Agradable! :)
HyperNeutrino
7

Python 2 , 57 bytes

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

Pruébalo en línea!

También 57:

Python 2 , 57 bytes

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

Pruébalo en línea!

xnor
fuente
¿Puedes explicar tu lógica detrás len(s[:i][:n])? Estoy convencido de que hay una forma más corta de obtener ese número, pero no estoy seguro de cómo.
musicman523
¡No importa, lo tengo! Pero es un byte más corto que min(len(s),i,n). ¡Gran trabajo!
musicman523
6

JavaScript (ES6), 67 65 bytes

-2 bytes gracias al método más corto de Chas Brown usando min().

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

Toma de entrada en la sintaxis currificación: f("abalone")(3).

Fragmento de prueba

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>

Justin Mariner
fuente
6

Jalea , 8 7 bytes

J««U$⁸x

Pruébalo en línea!

Cómo funciona

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

-1 byte gracias a @LeakyNun

fireflame241
fuente
Buen hallazgo @LeakyNun! Lo más cerca que llegué en esa dirección fue J«¥@«U$x@de 9 bytes.
fireflame241
¿Explicación por favor?
Camarada SparklePony
@ fireflame241 generalmente, x@⁸es equivalente a ⁸x(solía aquí)
Leaky Nun
2

Haskell , 61 60 bytes

Gracias a @Laikoni por ayudar a reducir 1 byte

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

Pruébalo en línea!

Sin golf:

(#) n string = do
    (i, char) <- zip [1..] string
    replicate (minimum [n, i, length(string)-i+1]) char
Julian Wolf
fuente
Gran uso de un dobloque! Guarde un byte colocando el paréntesis length(s).
Laikoni
1

Haskell (Lambdabot), 74 bytes

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

Pruébalo en línea!

ბიმო
fuente
¡Las importaciones cuentan en el puntaje! Sería mejor con>>=id
bartavelle
Sí, también lo hice antes y luego vi esto (es por eso que hay Lambdabot entre paréntesis). ¿Cuál es la manera correcta?
ბიმო
Estoy corregido, creo que esto está bien!
bartavelle
Es bueno saber que hay muchas importaciones muy útiles en esa lista.
ბიმო
1

J, 24 bytes

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

El bit en parens - (<.&n<./(|.,:[)>:i.#s)crea la 1 2 ... n n n ... 2 1matriz de la siguiente manera:

                   #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

Una vez que tenemos eso, el #operador de J automáticamente hace exactamente lo que pidió, duplicando cada elemento el número de veces especificado.

Curioso por ver la mejora de un experto J en esto ...

Jonás
fuente
23 bytes con un enfoque bastante diferente [#~#@[$([:>:<:,&:i.-)@](tal vez un espacio perdido quedó atrapado allí). No sé por qué el gancho no está funcionando, xpero no está en una posición demasiado importante para preocuparse.
cole
1

PHP> = 7.1, 75 bytes

for([,$a,$n]=$argv;--$z?:($x=$a[$i]).$z=min($n,strlen($a)-$i,++$i);)echo$x;

PHP Sandbox en línea

PHP> = 7.1, 78 bytes

for([,$a,$n]=$argv;~$x=$a[$i];)for($z=min($n,strlen($a)-$i,++$i);$z--;)echo$x;

PHP Sandbox en línea

PHP> = 7.1, 80 bytes

for([,$a,$n]=$argv;$i<$l=strlen($a);)echo str_repeat($a[$i],min($n,$l-$i,++$i));

PHP Sandbox en línea

Jörg Hülsermann
fuente
1

Japt , 11 10 bytes

ËpVm°TEnUÊ

Pruébalo


Explicación

Entrada implícita de cadena Uy entero V.

Ë

Mapa Uy reemplazar cada personaje.

Vm

Obtenga el mínimo de V...

°T

T(inicialmente 0) incrementado en 1, ...

EnUÊ

Y el índice del carácter actual ( E) se resta de ( n) la longitud ( Ê) de U.

p

Repite el personaje actual muchas veces.

Salida implícita de la cadena final.

Lanudo
fuente
1

R , 87 bytes

function(N,s)paste(rep(strsplit(s,"")[[1]],c(1:N,rep(N,nchar(s)-2*N),N:1)),collapse="")

Pruébalo en línea!

Giuseppe
fuente
0

Python 2 68 bytes

f=lambda s,n:''.join(s[i]*min(i+1,len(s)-i,n)for i in range(len(s)))
Chas Brown
fuente
No necesitas el f=en la respuesta; La función puede ser anónima. Con eso en mente, puede eliminar 3 bytes con lambda s,n:''.join(c*min(i+1,len(s)-i,n)for i,c in enumerate(s)).
notjagan
0

Casco , 10 9 bytes

₁₁ṀR
↔z↑N

Pruébalo en línea!

La primera línea es la función principal, repite cada letra n veces y luego llama a la segunda línea dos veces.

La segunda línea toma como máximo N letras de cada grupo de letras repetidas, donde N es el índice basado en 1 del grupo, luego invierte la lista.

León
fuente
0

APL (Dyalog) , 15 bytes

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

{} Función donde el argumento izquierdo (cap) es y el argumento derecho (cadena) es :

≢⍵ cuenta el número de caracteres en la cadena

 generar esa cantidad de Ɩ ntegers

i← almacenar en i

 marcha atrás

i⌊ mínimo por pares con i

⍺⌊ mínimo por pares con la tapa

⍵/⍨ usa esos números para replicar las letras de la cadena

Pruébalo en línea!

Adán
fuente
0

El abulón es un tipo de pescado (bueno, un marisco), por lo tanto ...

> <> , 79 bytes

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

¡Pruébelo en línea o mírelo en el área de juegos para peces !

Lee la cadena de STDIN y supone que el número ya está en la pila.

Explicación: Las líneas segunda, cuarta y sexta son los bucles principales. Los detalles son una manipulación fea de la pila, pero a grandes rasgos, primero, la segunda línea llena la pila alternando entre un carácter de entrada y min ( in ), donde n es el límite de longitud e i es el índice del carácter en la entrada: para "abulón", 3, la pila se ve como

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

A continuación, la línea 4 pasa por la pila de la misma manera en reversa, para que el extremo derecho quede correctamente tapado:

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

Luego, la sexta línea toma cada par de caracteres y números e imprime el carácter tantas veces como el número.

No un arbol
fuente