Contexte
Je suis actuellement dans une classe AP Comp Sci A: Java, et je veux commencer certains de mes amis sur le golf de code. J'ai un défi à relever pendant le cours, et j'aimerais voir dans combien d'octets la communauté peut relever ce défi.
Détails du défi:
Étant donné deux chaînes d'entrée, la chaîne principale et la chaîne pivot, procédez comme suit:
Si la chaîne pivot est exactement une fois en tant que sous-chaîne de la chaîne principale, la partie de la chaîne principale qui précède la chaîne pivot doit être permutée avec la partie qui suit, tout en préservant l'ordre dans lesdites sous-chaînes permutées. .
Par exemple:
Si la chaîne pivot est vide ou la chaîne pivot est pas trouvée dans la chaîne principale, le programme n'a pas besoin d'avoir un comportement défini.
S'il existe plusieurs instances de la chaîne pivot, la division doit se produire à la première et uniquement à la première instance du pivot.
Exemples: Étant donné la chaîne principale OneTwoThreeTwoOne
et la chaîne pivot Two
, la sortie doit être ThreeTwoOneTwoOne
.
Étant donné la chaîne principale 1Two2Two3Two4
et le pivot Two
, la sortie devrait être 2Two3Two4Two1
.
Étant donné la chaîne principale OneTwoThree
et la chaîne pivot "Two", la sortie devrait être ThreeTwoOne
. Étant donné la chaîne principale the rabbit is faster than the turtle
et la chaîne pivot
is faster than
(notez le seul espace qui suit et qui précède), la sortie devrait être the turtle is faster than the rabbit
.
Étant donné la chaîne principale 1-2-3-4-5-6
et le pivot -
, la sortie devrait être 2-3-4-5-6-1
.
Épilogue:
C'est ma toute première question sur le golf de code, donc si vous avez des suggestions ou des critiques constructives, n'hésitez pas à le dire.
De plus, mon code pour ce projet (écrit en Java parce que le cours se concentre sur cela) peut être trouvé ci-dessous. Si vous avez des conseils, j'adorerais les voir. C'est actuellement 363 octets, mais je parie que vous pouvez trouver des solutions bien meilleures et plus petites.
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]);}}
Remarque: Le texte pour les entrées et pour le cas où la chaîne pivot est introuvable est obligatoire pour l'affectation d'origine, mais pas pour ce défi.
pivot='-'
etmain='1-2-3-4-5-6'
? La plupart des soumissions produisent2-3-4-5-6-1
pour cela, mais si je comprends bien le défi que cela devrait être2-1-3-4-5-6
.2-3-4-5-6-1
.Réponses:
Mathematica, 42 octets
Essayez-le en ligne!
la source
Gelée , 6 octets
Essayez-le en ligne!
Explication
la source
œṣ
"divise x autour de sous-listes égales à y ",ṙ1
fait pivoter le tableau d'une place vers la gauche etj⁴
rejoint la deuxième entrée.Python 2 , 37
39octetsOù
a
est la chaîne principale etb
la chaîne pivot.Essayez-le en ligne!
la source
split(b)
parsplit(b,1)
pour spécifier que vous ne souhaitez diviser que lors de la première occurrence.split
accepter plus d'arguments, merci!Wolfram Language (Mathematica) , 34 octets
Essayez-le en ligne!
Une fonction au curry sans nom qui doit être appelée avec le pivot en premier et la chaîne principale en second. Par exemple, si vous avez attribué la fonction à un nom
f
:la source
Ohm v2 , 4 octets
Essayez-le en ligne!
la source
Perl 5 , 20 + 2 (
-pl
) = 22 octetsEssayez-le en ligne!
Prend la chaîne pivot sur la première ligne, puis la chaîne complète sur la seconde.
la source
/
s autour$_
peut être supprimé$_=~<>;$_="$'$&$
"` fait 20 octets et lit les arguments dans le bon ordrePython 2 ,
5344 octetsmerci à ThePlasmaRailgun pour quelques octets
Essayez-le en ligne!
la source
print k[1]+p+k[0]
. Cela devrait avoir un comportement voulu.k,j=m.split(p,1);print j,p,k
38 octets.Python 2 , 37 octets
Essayez-le en ligne!
la source
C # (Visual C # Compiler) , 56 octets
Essayez-le en ligne!
la source
Alice , 18 octets
Essayez-le en ligne!
Explication
Ceci est juste un cadre pour le code en mode Ordinal linéaire (traitement de chaîne). En dépliant le flux de contrôle en zigzag, nous obtenons:
la source
SOGL V0.12 ,
95 octetsEssayez-le ici!
Explication:
la source
Rétine ,
2423 octetsréservoirs à Martin Ender pour -1 octet
Essayez-le en ligne!
la source
Python 2 , 48 octets
Essayez-le en ligne!
la source
Pyth , 8 octets
Essayez-le ici!
Explication
la source
Fusain , 13 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
R ,
635857 octetsEssayez-le en ligne!
M
est la chaîne principale,P
est le pivot.La réponse d'ovs sur la rétine a indiqué que je pouvais réparer ma tentative antérieure d'approche regex
en ajoutant
?
au premier groupe de capture.la source
Java 8, 47 octets
Essayez-le en ligne
la source
JavaScript (ES6),
4140 octetsCas de test
Afficher l'extrait de code
la source
J , 14 octets
Comment ça fonctionne:
L'argument de gauche est le pivot, celui de droite - la chaîne à inverser
Essayez-le en ligne!
la source
C,
106100 octetsEssayez-le en ligne!
la source
SNOBOL4 (CSNOBOL4) , 53 octets
Essayez-le en ligne!
Prend l'entrée en tant que Pivot, puis Principal, séparé par une nouvelle ligne.
Ceci est essentiellement l'équivalent SNOBOL de ma réponse R .
la source
Perl 6 , 31 octets
Essaye-le
la source
PHP, 62 octets
nécessite PHP 7.1; peut échouer si le pivot contient des caractères spéciaux regex (
\+*?[^]$(){}=!<>|:-
).aucun changement si Pivot est vide, sortie vide si Pivot n'est pas en entrée.
Courir avec
-n
.version sûre, 77 octets:
aucun changement si Pivot est vide, sortie vide si Pivot n'est pas en entrée.
Courez avec
-n
.version non regex, 71 octets:
renvoie des avertissements si le pivot est vide; aucun changement si Pivot n'est pas en entrée.
Courez avec
-nr
.Essayez-les en ligne .
la source
Rouge , 63 octets
Essayez-le en ligne!
la source
Swift , 131 octets
Explication (non golfée)
la source
C (gcc) , 76 octets
Essayez-le en ligne!
la source
C ++ 11, 64 octets
Un lambda, qui capture les chaînes s, p et a, avec a comme référence (in-out).
Code de test
la source
Nettoyer , 83 octets
Un
String
dans Clean est normalement{#Char}
- un tableau unboxed (#
)Char
({}
). Cette fonction prend la[Char]
place deString
, qui est une deuxième version valide deString
.La signature de fonction complète est
f :: [.t] .t -> [.t] | [.t <= Char]
.Essayez-le en ligne!
la source
Japt ,
87 octetsEssayez-le ici
la source