Sie müssen eine Funktion / ein Programm schreiben, die / das über die stdin
/ Befehlszeilenargumente / Funktionsargumente eingibt, Zeichen in einer Zeichenfolge mischt und dann die endgültige Zeichenfolge über das ausgibt stdout
.
Die Eingabe enthält zuerst eine Zeichenfolge (nicht leer oder null
), ein Leerzeichen und dann eine gerade Anzahl nicht negativer Zahlen, die alle durch Leerzeichen getrennt sind. Wenn die Eingabe über Funktionsargumente erfolgt, ist die Zeichenfolge eines der Argumente, während die durch ein Leerzeichen getrennten Ganzzahlen die andere sind. Sie müssen die Zeichen der Zeichenfolge an den Indizes austauschen, die aufeinanderfolgenden Zahlenpaaren entsprechen.
Zum Beispiel:
Hello_world! 0 6
muss ergeben
wello_Horld!
Annahmen
- Sie können zwischen 0-basierter und 1-basierter Indizierung wählen und davon ausgehen, dass die angegebenen Indizes immer im Bereich liegen.
- Die Zeichenfolge darf nicht länger als 100 Zeichen sein und enthält nur ASCII-Zeichen im Bereich
!
bis~
(Zeichencodes 0x21 bis einschließlich 0x7E). Siehe ASCII-Tabelle als Referenz. - Die beiden Indizes in einem Paar können identisch sein (in diesem Fall wird in diesem Schritt nichts ausgetauscht).
Wertung
Dies ist Code Golf, daher gewinnt die kürzeste Übermittlung (in Bytes).
Testfälle
Hello_world! 0 6 => wello_Horld!
First 1 2 1 0 0 4 => tFisr
(Second!$$) 8 7 10 1 => ()econd$!$S
~Third~ 0 0 6 6 0 6 6 0 => ~Third~
Antworten:
CJam, 11 Bytes
Wie es funktioniert
Dies ist ein etwas anderer Ansatz, bei dem ich einfach eine Do-While-Schleife durchführe, bis ich noch Zahlenpaare in der Eingabe habe.
Probieren Sie es hier online aus
quelle
Python 3,
8986 BytesPacken Sie alle Dinge aus. (3 Bytes dank @potato gespeichert)
quelle
[*s],*L=input().split()
Sie können die Zeile danach wegnehmen. Ich mag deine Lösung übrigens sehr, sie ist fast elegant, obwohl sie sehr gut gespielt ist.CJam, 13 Bytes
Testen Sie es hier.
Erläuterung
quelle
C (137 b)
Erklärung kommt ...
Argumente
T = ein Wort vom Typ char * .
V = ein Array einer geraden Anzahl von ganzzahligen Elementen.
L = Länge von V.
Ausgabe
gemischte Saite
Wie funktioniert es ? ::
Wischt die Anzahl der Arrays V umgekehrt und setzt das n-te Element der Zeichenfolge, nachdem der gesamte Fortschritt bis zum tatsächlichen Punkt verfolgt wurde. Beispiel
Eingabe = T = "Zuerst", V = {1,2,1,0,0,4}
V invers = {4,0,0,1,2,1}
Probieren Sie es hier aus
quelle
int
wird nicht benötigt (kann zu unerwartetem Verhalten führen), undint
Variablen, die Parameter sind, benötigen keineint
Variablen, anstatt in der Schleife zu deklarieren, können an einer Stelle außerhalb der Schleife deklariert werden,putchar
anstelle vonprintf
usw.Python 3 -
161149Golfen Sie mehr, indem Sie einige Variablen austauschen und
;
wie in Tims Kommentar verwenden.Ich hatte erwartet, dass es wie ein Golfspiel herauskommt, nur nicht so sehr.
quelle
while
inwhile c<len(t):line1;line2;line3...
.c=c+2
geht zuc+=2
c
Tatsächlich wird indiziertt
(die Eingabe), um die Positionen zu erhalten, die wir tauschen müssen. Aber dat[0]
ist die Saite, die wir austauschen müssen,t[1]
undt[2]
halten Sie das erste Paar Swaps.C
109107102 BytesHinweis:
s
unda
muss als globale Arrays deklariert werden.s
ist die Zeichenfolge, die Sie austauschen möchten, unda
besteht aus einem Arrayint
mit allen Zahlenwerten.Wenn der obige Code nicht funktioniert, versuchen Sie es mit
void f(){...}
anstelle vonf(){...}
Ungolfed Code:
Testen Sie es hier
quelle
Python 3, 135
Erläuterung:
quelle
C 70 Bytes
Da die Eingabezeichenfolge höchstens 100 ist, habe ich beschlossen, das Byte 'NULL' so anzugeben, dass das Ende des Integer-Arrays eindeutig ist
0xFF
. Vermutlich zählt dies nicht als zusätzliche Eingabe, obwohl es für Kosten von(höchstens) 73 Bytes in eine 1-basierte Indizierung umgewandelt und'\0'
als Ende des Arrays verwendet werden kann.Ziemlich einfach wird regelmäßig mit einer tmp-Variablen getauscht und verwendet, dass der Komma-Operator Sequenzpunkte einführt, um ein definiertes Verhalten zu haben (im Gegensatz zu einigen Manifestationen von xor-Swaps, die eine geringere Anzahl von Zeichen haben würden, aber zu undefiniertem Verhalten führen).
Bearbeiten: Wie gewünscht können Sie es testen: http://rextester.com/OVOQ23313 .
quelle
Dart - 123
Angenommen, die Eingabe in der Befehlszeile wird automatisch in Leerzeichen aufgeteilt. Andernfalls ist eine Initiale erforderlich
x=x[0].split(' ');
, um die Zeichenfolge in Text und Indizes aufzuteilen.Mit mehr Leerzeichen:
Führen Sie dies auf dartpad.dartlang.org aus / testen Sie es .
quelle
Rebol - 71
Ungolfed:
quelle
input
Funktion kann STDIN von dort nicht aufrufen. Die Problemumgehung besteht darin, einfachinput
den Wert festzulegen, den Sie testen möchten. Hier ist das vollständige Beispiel des ersten Tests -input: "hello_World 1 7" s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s
und klicken Sie auf Do in Rebol 3 NB. Rebol verwendet eine 1-basierte Indizierung.C 143 Bytes
Das obige Programm nimmt Eingaben von Befehlszeilenargumenten entgegen, kopiert die Zeichenfolge in ein Array, tauscht entsprechende Zeichen aus und gibt dann die geänderte Zeichenfolge aus.
Ungolfed Code:
quelle
10
einen der Indizes hat.JavaScript (ES6), 95
95 Bytes mit einer einzelnen Zeichenfolgeneingabe (Funktion f unten)
75 Bytes mit 2 Parametern, String und Zahlenarray (Funktion g unten)
(EcmaScript 6, nur Firefox)
quelle