Antecedentes
Actualmente estoy en una clase AP Comp Sci A: Java, y quiero comenzar a algunos de mis amigos en golf de código. Tengo un desafío del curso, y me gustaría ver en cuántos bytes la comunidad puede hacer este desafío.
Detalles del desafío:
Dadas dos cadenas de entrada, la cadena principal y la cadena de pivote, haga lo siguiente:
Si la cadena de pivote es exactamente una vez como una subcadena de la cadena principal, la parte de la cadena principal que viene antes de la cadena de pivote se intercambiará con la parte que viene después, mientras se preserva el orden dentro de dichas subcadenas que se intercambian .
Por ejemplo:
Si la cadena dinámica está vacía o la cadena dinámica no se encuentra dentro de la cadena principal, el programa no tiene que tener un comportamiento definido.
Si hay más de una instancia de la cadena de pivote, la división debe ocurrir en la primera y solo la primera instancia del pivote.
Ejemplos: Dada la cadena principal OneTwoThreeTwoOne
y la cadena dinámica Two
, la salida debería ser ThreeTwoOneTwoOne
.
Dada la cadena principal 1Two2Two3Two4
y el pivote Two
, la salida debería ser 2Two3Two4Two1
.
Dada la cadena principal OneTwoThree
y la cadena de pivote "Dos", la salida debería ser ThreeTwoOne
. Dada la cadena principal the rabbit is faster than the turtle
y la cadena de pivote
is faster than
(tenga en cuenta el espacio único que sigue y anterior), la salida debe ser the turtle is faster than the rabbit
.
Dada la cadena principal 1-2-3-4-5-6
y el pivote -
, la salida debería ser 2-3-4-5-6-1
.
Epílogo:
Esta es mi primera pregunta sobre el código de golf, así que si tiene sugerencias o críticas constructivas, no dude en decirlo.
Además, mi código para este proyecto (escrito en Java porque el curso se centra en eso) se puede encontrar a continuación. Si tienes algún consejo, me encantaría verlo. Actualmente tiene 363 bytes, pero apuesto a que ustedes pueden encontrar soluciones mucho mejores y más pequeñas.
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]);}}
Nota: El texto para las entradas y para el caso de que no se encuentre la cadena de pivote es obligatorio para la asignación original, pero no para este desafío.
pivot='-'
ymain='1-2-3-4-5-6'
? La mayoría de las presentaciones salen2-3-4-5-6-1
para esto, pero como entiendo el desafío, debería ser2-1-3-4-5-6
.2-3-4-5-6-1
.Respuestas:
Mathematica, 42 bytes
Pruébalo en línea!
fuente
Jalea , 6 bytes
Pruébalo en línea!
Explicación
fuente
œṣ
está "dividido x alrededor de sublistas igual a y ",ṙ1
gira la matriz un lugar a la izquierda y sej⁴
une con la segunda entrada.Python 2 , 37
39bytes¿Dónde
a
está la cadena principal yb
es la cadena de pivote?Pruébalo en línea!
fuente
split(b)
asplit(b,1)
para especificar que solo desea dividir la primera vez.split
aceptaba más argumentos, ¡gracias!Wolfram Language (Mathematica) , 34 bytes
Pruébalo en línea!
Una función curry sin nombre que debe llamarse con el pivote primero y la cadena principal segundo. Por ejemplo, si asignó la función a un nombre
f
:fuente
Ohm v2 , 4 bytes
Pruébalo en línea!
fuente
Perl 5 , 20 + 2 (
-pl
) = 22 bytesPruébalo en línea!
Toma la cadena de pivote en la primera línea, luego la cadena completa en la segunda.
fuente
/
s alrededor$_
$_=~<>;$_="$'$&$
"` tiene 20 bytes y lee los argumentos en el orden correctoPython 2 ,
5344 bytesgracias a ThePlasmaRailgun por algunos bytes
Pruébalo en línea!
fuente
print k[1]+p+k[0]
. Esto debería haber tenido un comportamiento intencionado.k,j=m.split(p,1);print j,p,k
en 38 bytes.Python 2 , 37 bytes
Pruébalo en línea!
fuente
C # (compilador de Visual C #) , 56 bytes
Pruébalo en línea!
fuente
Alice , 18 bytes
Pruébalo en línea!
Explicación
Esto es solo un marco para el código lineal del modo ordinal (procesamiento de cadenas). Al desplegar el flujo de control en zigzag, obtenemos:
fuente
SOGL V0.12 ,
95 bytesPruébalo aquí!
Explicación:
fuente
Retina ,
2423 bytestanques a Martin Ender por -1 byte
Pruébalo en línea!
fuente
Python 2 , 48 bytes
Pruébalo en línea!
fuente
Pyth , 8 bytes
Pruébalo aquí!
Explicación
fuente
Carbón , 13 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
R ,
635857 bytesPruébalo en línea!
M
es la cadena principal,P
es el pivote.La respuesta de Retina de ovs indicó que podía reparar mi intento anterior de un enfoque de expresiones regulares
agregando
?
al primer grupo de captura.fuente
Java 8, 47 bytes
Pruébalo en línea
fuente
JavaScript (ES6),
4140 bytesCasos de prueba
Mostrar fragmento de código
fuente
J , 14 bytes
Cómo funciona:
El argumento izquierdo es el pivote, el derecho: la cadena que se va a invertir.
Pruébalo en línea!
fuente
C,
106100 bytesPruébalo en línea!
fuente
SNOBOL4 (CSNOBOL4) , 53 bytes
Pruébalo en línea!
Toma datos como Pivot, luego Main, separados por una nueva línea.
Este es básicamente el equivalente SNOBOL de mi R respuesta .
fuente
Perl 6 , 31 bytes
Pruébalo
fuente
PHP, 62 bytes
requiere PHP 7.1; puede fallar si el pivote contiene caracteres especiales regex (
\+*?[^]$(){}=!<>|:-
).sin cambios si Pivot está vacío, salida vacía si Pivot no está en la entrada.
Corre con
-n
.versión segura, 77 bytes:
sin cambios si Pivot está vacío, salida vacía si Pivot no está en la entrada.
Corre con
-n
.versión no regex, 71 bytes:
produce advertencias si el Pivot está vacío; no cambia si Pivot no está en la entrada.
Corre con
-nr
.Pruébalos en línea .
fuente
Rojo , 63 bytes
Pruébalo en línea!
fuente
Rápido , 131 bytes
Explicación (sin golf)
fuente
C (gcc) , 76 bytes
Pruébalo en línea!
fuente
C ++ 11, 64 bytes
Una lambda, que captura las cadenas s, p y a, con a como referencia (in-out).
Código de prueba
fuente
Limpio , 83 bytes
A
String
en Clean normalmente es{#Char}
una matriz unboxed (#
)Char
({}
). Esta función toma en[Char]
lugar deString
, que es una segunda versión válida deString
.La firma de la función completa es
f :: [.t] .t -> [.t] | [.t <= Char]
.Pruébalo en línea!
fuente
Japt ,
87 bytesPruébalo aquí
fuente