Scala di corda ricoperta


12

Data una stringa se un numero intero positivo N, duplica gradualmente ogni carattere sempre di più fino ai Nduplicati, quindi rimani sui Nduplicati fino a quando i Ncaratteri si allontanano dalla fine, quindi scendi di nuovo.

Ad esempio, dato abalonee 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

e il risultato sarebbe abbaaalllooonne.

È garantito che la stringa abbia una lunghezza maggiore di 2Ne abbia solo caratteri da aa z.

Altre prove:

N string       output
2 aaaaa        aaaaaaaa
3 abcdabcdabcd abbcccdddaaabbbcccdddaaabbbccd

Questo è . Vince la risposta più breve in byte. Si applicano scappatoie standard .

Risposte:


11

Gelatina , 6 byte

JṡFṢị⁸

Provalo online!

Come funziona

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.

Esecuzione del campione

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
Quel metodo split + flat + sort è puro genio. Bello! :)
HyperNeutrino il

7

Python 2 , 57 byte

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

Provalo online!

Anche 57:

Python 2 , 57 byte

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

Provalo online!


Puoi spiegare la tua logica len(s[:i][:n])? Sono convinto che ci sia un modo più breve per ottenere quel numero, ma non sono sicuro di come.
musicman523

Non importa, ho capito! Ma è un byte più corto di min(len(s),i,n). Ottimo lavoro!
musicman523

6

JavaScript (ES6), 67 65 byte

-2 byte grazie al metodo più breve di Chas Brown che utilizza min().

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

Riceve l'input nella sintassi accattivarsi: f("abalone")(3).

Test snippet

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

Gelatina , 8 7 byte

J««U$⁸x

Provalo online!

Come funziona

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 grazie a @LeakyNun


Buona scoperta @LeakyNun! Il più vicino che ho ottenuto in quella direzione era J«¥@«U$x@per 9 byte.
fireflame241

Spiegazione per favore?
Compagno SparklePony

@ fireflame241 genenrally, x@⁸è equivalente a ⁸x(l'ho usato qui)
Leaky Nun

2

Haskell , 61 60 byte

Grazie a @Laikoni per l'aiuto nella rasatura di 1 byte

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

Provalo online!

Ungolfed:

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

Ottimo uso di un doblocco! Salvare un byte rilasciando la parentesi length(s).
Laikoni,


1

J, 24 byte

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

Il bit in parentesi - (<.&n<./(|.,:[)>:i.#s)- crea l' 1 2 ... n n n ... 2 1array, come segue:

                   #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 volta ottenuto ciò, l' #operatore di J fa automaticamente esattamente ciò che è stato richiesto, duplicando ogni elemento il numero di volte specificato.

Curioso di vedere l'improvvisazione di un esperto J su questo ...


23 byte con un approccio abbastanza diverso [#~#@[$([:>:<:,&:i.-)@](forse uno spazio randagio è rimasto intrappolato lì). Sono in perdita sul motivo per cui l'amo non sta prendendo, xma non è in una posizione troppo importante per la cura.
Cole


1

Japt , 11 10 byte

ËpVm°TEnUÊ

Provalo


Spiegazione

Immissione implicita di stringa Ue numero intero V.

Ë

Mappa su Ue sostituisci ogni personaggio.

Vm

Ottieni il minimo di V, ...

°T

T(inizialmente 0) incrementato di 1, ...

EnUÊ

E l'indice del carattere corrente ( E) sottratto da ( n) la lunghezza ( Ê) di U.

p

Ripeti il ​​personaggio attuale più volte.

Emette implicitamente la stringa finale.



0

Python 2 68 byte

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

Non è necessario il f=nella risposta; la funzione può essere anonima. Tenendo presente ciò, è possibile rimuovere 3 byte con lambda s,n:''.join(c*min(i+1,len(s)-i,n)for i,c in enumerate(s)).
Notjagan,

0

Buccia , 10 9 byte

₁₁ṀR
↔z↑N

Provalo online!

La prima linea è la funzione principale, ripete ogni lettera n volte e quindi chiama la seconda linea due volte.

La seconda riga prende al massimo N lettere da ciascun gruppo di lettere ripetute, dove N è l'indice a base 1 del gruppo, quindi inverte l'elenco.



0

APL (Dyalog) , 15 byte

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

{... } funzione in cui l'argomento left (cap) è e l'argomento right (stringa) è :

≢⍵ contare il numero di caratteri nella stringa

 generare che molti ɩ ntegers

i← conservare in i

 inverso

i⌊ minimo a coppie con i

⍺⌊ minimo a coppie con il cappuccio

⍵/⍨ usa quei numeri per replicare le lettere della stringa

Provalo online!




0

L'aliotide è un tipo di pesce (beh, un mollusco), quindi ...

> <> , 79 byte

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

Provalo online o guardalo nel parco giochi per pesci !

Legge la stringa da STDIN e presuppone che il numero sia già nello stack.

Spiegazione: La seconda, la quarta e la sesta riga sono i loop principali. I dettagli sono una brutta manipolazione dello stack, ma a grandi linee, in primo luogo, la seconda riga riempie lo stack alternando un carattere di input e min ( in ), dove n è il limite di lunghezza e i è l'indice del personaggio in l'input: per "abalone", 3, lo stack sembra

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

Successivamente, la linea 4 passa attraverso la pila allo stesso modo al contrario, per ottenere il limite destro corretto:

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

Quindi la sesta riga prende ogni coppia carattere-numero e stampa il personaggio tante volte quanto il numero.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.