Mit einer Kappe bedeckte Schnurleiter

12

Wenn Sie eine Zeichenfolge sund eine positive Ganzzahl haben N, duplizieren Sie jedes Zeichen schrittweise mehr und mehr, bis es Ndoppelt vorhanden ist, und bleiben Sie dann bei NDuplikaten, bis das NZeichen vom Ende entfernt ist, und treten Sie dann wieder zurück.

Zum Beispiel gegeben abaloneund 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

und das Ergebnis wäre abbaaalllooonne.

Es ist garantiert, dass die Zeichenfolge länger ist als 2Nund nur Zeichen von abis enthält z.

Weitere Testfälle:

N string       output
2 aaaaa        aaaaaaaa
3 abcdabcdabcd abbcccdddaaabbbcccdddaaabbbccd

Das ist . Kürzeste Antwort in Bytes gewinnt. Es gelten Standardlücken .

Undichte Nonne
quelle

Antworten:

11

Gelee , 6 Bytes

JṡFṢị⁸

Probieren Sie es online!

Wie es funktioniert

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.

Probelauf

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
quelle
3
Diese Split + Flatten + Sort-Methode ist einfach genial. Nett! :)
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)

Probieren Sie es online!

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

Probieren Sie es online!

xnor
quelle
Können Sie Ihre Logik dahinter erklären len(s[:i][:n])? Ich bin überzeugt, dass es einen kürzeren Weg gibt, um diese Nummer zu bekommen, aber ich bin mir nicht sicher, wie.
musicman523
Egal, ich habe es verstanden! Aber es ist ein Byte kürzer als min(len(s),i,n). Gut gemacht!
Musicman523
6

JavaScript (ES6), 67 65 Bytes

-2 Bytes dank der kürzeren Methode von Chas Brownmin() .

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

Nimmt die Eingabe in currying Syntax: f("abalone")(3).

Testschnipsel

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
quelle
6

Gelee , 8 7 Bytes

J««U$⁸x

Probieren Sie es online!

Wie es funktioniert

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 dank @LeakyNun

fireflame241
quelle
Gut finde @LeakyNun! Das nächste, was ich in diese Richtung bekam, war J«¥@«U$x@für 9 Bytes.
Fireflame241
Erklärung bitte?
Genosse SparklePony
@ fireflame241 im Allgemeinen x@⁸ist gleichwertig mit ⁸x(ich hier verwendet)
Leaky Nun
2

Haskell , 61-60 Bytes

Vielen Dank an @Laikoni für die Hilfe bei der Rasur von 1 Byte

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

Probieren Sie es online!

Ungolfed:

(#) n string = do
    (i, char) <- zip [1..] string
    replicate (minimum [n, i, length(string)-i+1]) char
Julian Wolf
quelle
Großartige Verwendung eines doBlocks! Speichern Sie ein Byte, indem Sie die Klammer einfügen 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

Probieren Sie es online!

ბიმო
quelle
Importe zählen in der Partitur! Sie wären besser mit>>=id
Bartavelle
Ja, ich habe das auch vor und dann sah ich dies (das ist , warum es Lambdabot in Klammern ist). Was ist der richtige Weg?
4.
Ich stehe korrigiert, ich finde das in Ordnung!
Bartavelle
Gut zu wissen, dass diese Liste viele sehr nützliche Importe enthält.
4.
1

J, 24 Bytes

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

Das Bit in parens - (<.&n<./(|.,:[)>:i.#s)- erstellt das 1 2 ... n n n ... 2 1Array wie folgt:

                   #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

Sobald wir das haben, macht der #Operator von J automatisch genau das, wonach er gefragt hat, und dupliziert jedes Element so oft, wie es angegeben wurde.

Neugierig zu sehen, wie sich ein J-Experte dazu verbessert ...

Jona
quelle
23 Bytes mit einer ganz anderen Herangehensweise [#~#@[$([:>:<:,&:i.-)@](vielleicht hat sich dort ein streunender Raum verfangen). Ich bin ratlos, warum der Haken nicht nimmt, xaber nicht zu sehr in der Lage, sich darum zu kümmern.
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 Online

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 Online

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 Online

Jörg Hülsermann
quelle
1

Japt , 11 10 Bytes

ËpVm°TEnUÊ

Probier es aus


Erläuterung

Implizite Eingabe von Zeichenfolge Uund Ganzzahl V.

Ë

Karte über Uund ersetze jedes Zeichen.

Vm

Holen Sie sich das Minimum von V, ...

°T

T(anfangs 0) um 1 erhöht, ...

EnUÊ

Und der Index des aktuellen Zeichens ( E) subtrahiert von ( n) die Länge ( Ê) von U.

p

Wiederholen Sie das aktuelle Zeichen so oft.

Geben Sie implizit die letzte Zeichenfolge aus.

Zottelig
quelle
1

R 87 Bytes

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

Probieren Sie es online!

Giuseppe
quelle
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
quelle
Sie brauchen das f=in der Antwort nicht; Die Funktion kann anonym sein. In diesem Sinne können Sie mit 3 Bytes entfernen lambda s,n:''.join(c*min(i+1,len(s)-i,n)for i,c in enumerate(s)).
Notjagan
0

Schale , 10 9 Bytes

₁₁ṀR
↔z↑N

Probieren Sie es online!

Die erste Zeile ist die Hauptfunktion, sie wiederholt jeden Buchstaben n- mal und ruft dann die zweite Zeile zweimal auf.

Die zweite Zeile enthält höchstens N Buchstaben aus jeder Gruppe wiederholter Buchstaben, wobei N der auf 1 basierende Index der Gruppe ist, und kehrt dann die Liste um.

Löwe
quelle
0

APL (Dyalog) , 15 Bytes

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

{} Funktion, bei der das linke Argument ( Großbuchstabe ) und das rechte Argument (Zeichenfolge) ⍵ ist :

≢⍵ Zählen Sie die Anzahl der Zeichen in der Zeichenfolge

 erzeugen , dass viele ɩ ntegers

i← Laden in i

 umkehren

i⌊ paarweises Minimum mit i

⍺⌊ Paarweise mindestens mit der Kappe

⍵/⍨ Verwenden Sie diese Zahlen, um die Buchstaben der Zeichenfolge zu replizieren

Probieren Sie es online!

Adam
quelle
0

Java (OpenJDK 8) , 101 bis 97 Byte

n->s->{int i=0,j;for(char c:s)for(j=s.length-i++,j=j<i?j:i,j=j<n?j:n;j-->0;)System.out.print(c);}

Probieren Sie es online!

So viel mit Indizes spielen ...

Olivier Grégoire
quelle
0

Abalone ist eine Art von Fisch (auch ein Schalentier), daher ...

> <> 79 Bytes

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

Probieren Sie es online aus oder schauen Sie es sich auf dem Fischspielplatz an !

Liest die Zeichenfolge von STDIN und geht davon aus, dass sich die Nummer bereits auf dem Stapel befindet.

Erläuterung: Die zweite, vierte und sechste Zeile sind die Hauptschleifen. Die Details sind hässliche Stapelmanipulationen, aber in großen Strichen füllt die zweite Zeile den Stapel abwechselnd mit einem Zeichen aus Eingabe und min ( in ), wobei n die maximale Länge und i ist der Index des Zeichens in ist die Eingabe: für "Abalone", 3, sieht der Stapel wie folgt aus

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

Als nächstes durchläuft Zeile 4 den Stapel auf die gleiche Weise in umgekehrter Reihenfolge, um das rechte Ende richtig zu verschließen:

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

Dann nimmt die sechste Zeile jedes Zeichen-Zahlen-Paar und druckt das Zeichen so oft wie die Zahl.

Kein Baum
quelle