Hintergrund
Ich bin zurzeit in einer AP Comp Sci A: Java-Klasse und möchte einige meiner Freunde mit dem Code-Golfen beginnen. Ich habe eine Herausforderung aus dem Kurs und möchte sehen, in wie vielen Bytes die Community diese Herausforderung durchführen kann.
Herausforderungsdetails:
Wenn zwei Eingabezeichenfolgen, die Hauptzeichenfolge und die Pivotzeichenfolge, angegeben werden, gehen Sie wie folgt vor:
Wenn die Pivot-Zeichenfolge genau einmal Teil der Hauptzeichenfolge ist, muss der Teil der Hauptzeichenfolge, der vor der Pivot-Zeichenfolge liegt, mit dem nachfolgenden Teil ausgetauscht werden , wobei die Reihenfolge innerhalb der auszutauschenden Unterzeichenfolgen beibehalten wird .
Beispielsweise:
Wenn die Pivot-Zeichenfolge leer ist oder die Pivot-Zeichenfolge nicht in der Hauptzeichenfolge gefunden wird, muss das Programm kein definiertes Verhalten aufweisen.
Wenn mehr als eine Instanz der Pivot-Zeichenfolge vorhanden ist, sollte die Aufteilung bei der ersten und nur bei der ersten Instanz des Pivots erfolgen.
Beispiele: Ausgehend von der Hauptzeichenfolge OneTwoThreeTwoOne
und der Pivotzeichenfolge Two
sollte die Ausgabe sein ThreeTwoOneTwoOne
.
Wenn der Hauptstring 1Two2Two3Two4
und der Drehpunkt gegeben sind Two
, sollte die Ausgabe sein 2Two3Two4Two1
.
Bei der gegebenen Hauptzeichenfolge OneTwoThree
und der Pivotzeichenfolge "Zwei" sollte die Ausgabe sein ThreeTwoOne
. Gegeben die Hauptschnur the rabbit is faster than the turtle
und die Pivotschnur
is faster than
(beachte das einzelne Leerzeichen nach und vor), sollte die Ausgabe sein the turtle is faster than the rabbit
.
Wenn der Hauptstring 1-2-3-4-5-6
und der Drehpunkt gegeben sind -
, sollte die Ausgabe sein 2-3-4-5-6-1
.
Nachwort:
Dies ist meine allererste Frage zum Thema Codegolf. Wenn Sie also Vorschläge oder konstruktive Kritik haben, können Sie dies gerne sagen.
Außerdem ist mein Code für dieses Projekt (in Java geschrieben, weil der Kurs darauf abzielt) unten zu finden. Wenn Sie Tipps haben, würde ich sie gerne sehen. Derzeit sind es 363 Bytes, aber ich wette, ihr könnt euch viel bessere und kleinere Lösungen einfallen lassen.
import java.util.Scanner;interface Main{static<T>void D(T f){System.out.println(f);}static void main(String[]A){Scanner s=new Scanner(System.in);D("Enter the first String:");String a=s.nextLine();D("Enter the pivot String:");String p=s.nextLine();if(p.isEmpty()|!a.contains(p)){D("Error: Pivot String not found.");return;}String w[]=a.split(p,2);D(w[1]+p+w[0]);}}
Hinweis: Der Text für die Eingaben und für den Fall, dass die Pivot-Zeichenfolge nicht gefunden wird, ist für die ursprüngliche Zuweisung obligatorisch, jedoch nicht für diese Herausforderung.
pivot='-'
undmain='1-2-3-4-5-6'
? Die meisten Einreichungen geben2-3-4-5-6-1
dies aus, aber so wie ich es verstehe, sollte es eine Herausforderung sein2-1-3-4-5-6
.2-3-4-5-6-1
.Antworten:
Mathematica, 42 Bytes
Probieren Sie es online!
quelle
Gelee , 6 Bytes
Probieren Sie es online!
Erläuterung
quelle
œṣ
" x um Unterlisten gleich y teilen ",ṙ1
dreht das Array um eine Stelle nach links undj⁴
verbindet sich mit der zweiten Eingabe.Python 2 , 37
39BytesWo
a
ist die Hauptsaite undb
ist die Pivot-Saite.Probieren Sie es online!
quelle
split(b)
zu,split(b,1)
um anzugeben, dass Sie nur beim ersten Auftreten aufteilen möchten.split
mehr Argumente akzeptiert, danke!Wolfram Language (Mathematica) , 34 Byte
Probieren Sie es online!
Eine unbenannte Curry-Funktion, die mit dem Pivot zuerst und dem Hauptstring zweitens aufgerufen werden sollte. Wenn Sie beispielsweise die Funktion einem Namen zugewiesen haben
f
:quelle
Ohm v2 , 4 Bytes
Probieren Sie es online!
quelle
Perl 5 , 20 + 2 (
-pl
) = 22 BytesProbieren Sie es online!
Nimmt die Pivot-Zeichenfolge in die erste Zeile, dann die vollständige Zeichenfolge in die zweite.
quelle
/
s um$_
entfernt werden kann$_=~<>;$_="$'$&$
"` ist 20 Bytes und liest Argumente in der richtigen ReihenfolgePython 2 ,
5344 Bytesdanke an ThePlasmaRailgun für ein paar Bytes
Probieren Sie es online!
quelle
print k[1]+p+k[0]
. Dies sollte Verhalten beabsichtigt haben.k,j=m.split(p,1);print j,p,k
für 38 Bytes.Python 2 , 37 Bytes
Probieren Sie es online!
quelle
C # (Visual C # -Compiler) , 56 Byte
Probieren Sie es online!
quelle
Alice , 18 Bytes
Probieren Sie es online!
Erläuterung
Dies ist nur ein Framework für Code im linearen Ordinalmodus (Zeichenfolgenverarbeitung). Wenn wir den Zick-Zack-Kontrollfluss entfalten, erhalten wir:
quelle
SOGL V0.12 ,
95 BytesProbieren Sie es hier aus!
Erläuterung:
quelle
Retina ,
2423 BytesTanks an Martin Ender für -1 Byte
Probieren Sie es online!
quelle
Python 2 , 48 Bytes
Probieren Sie es online!
quelle
Pyth , 8 Bytes
Probieren Sie es hier aus!
Erläuterung
quelle
Kohle , 13 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
R ,
635857 BytesProbieren Sie es online!
M
ist die Hauptsaite,P
ist der Dreh- und Angelpunkt.Die Retina-Antwort von ovs zeigte an, dass ich meinen früheren Versuch eines Regex-Ansatzes reparieren konnte
durch Hinzufügen
?
zur ersten Erfassungsgruppe.quelle
Java 8, 47 Bytes
Probieren Sie es online aus
quelle
JavaScript (ES6),
41 bis40 ByteTestfälle
Code-Snippet anzeigen
quelle
J , 14 Bytes
Wie es funktioniert:
Das linke Argument ist der Drehpunkt, das rechte der umzukehrende String
Probieren Sie es online!
quelle
C
106100 BytesProbieren Sie es online!
quelle
SNOBOL4 (CSNOBOL4) , 53 Byte
Probieren Sie es online!
Nimmt die Eingabe als Pivot, dann als Main, getrennt durch eine neue Zeile.
Dies ist im Grunde das SNOBOL-Äquivalent meiner R-Antwort .
quelle
Perl 6 , 31 Bytes
Probier es aus
quelle
PHP, 62 Bytes
benötigt PHP 7.1; kann fehlschlagen, wenn der Pivot Regex-Sonderzeichen (
\+*?[^]$(){}=!<>|:-
) enthält.Keine Änderungen, wenn Pivot leer ist. Leere Ausgabe, wenn Pivot nicht in der Eingabe ist.
Laufen Sie mit
-n
.sichere Version, 77 Bytes:
Keine Änderungen, wenn Pivot leer ist. Leere Ausgabe, wenn Pivot nicht in der Eingabe ist.
Laufen Sie mit
-n
.Nicht-Regex-Version, 71 Bytes:
gibt Warnungen aus, wenn der Pivot leer ist; Keine Änderung, wenn Pivot nicht in der Eingabe ist.
Laufen Sie mit
-nr
.Probieren Sie sie online aus .
quelle
Rot , 63 Bytes
Probieren Sie es online!
quelle
Schnell , 131 Bytes
Erklärung (ungolfed)
quelle
C (gcc) , 76 Bytes
Probieren Sie es online!
quelle
C ++ 11, 64 Bytes
Ein Lambda, das die Zeichenfolgen s, p und a erfasst, mit a als Referenz (in-out).
Code testen
quelle
Sauber , 83 Bytes
Ein
String
in Clean ist normalerweise{#Char}
- ein unboxed (#
)Char
Array ({}
). Diese Funktion benötigt[Char]
stattdessenString
eine zweite, gültige Version vonString
.Die Vollfunktionssignatur ist
f :: [.t] .t -> [.t] | [.t <= Char]
.Probieren Sie es online!
quelle
Japt ,
87 BytesProbieren Sie es hier aus
quelle