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 .

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"

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!


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


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


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

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!


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


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

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.



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

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.



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!




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 ( i ,  n ), 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.