Este problema se trata de separar una cadena que representa un identificador de producto en tres componentes.
- La primera parte consta de letras superiores e inferiores de longitud arbitraria que representa el almacén.
- La segunda parte son los dígitos que representan el número del producto. Esta parte también es de longitud arbitraria.
- La última parte son calificadores como tamaño y colores, y esta parte continúa hasta el final de la cadena. Los calificadores están garantizados para comenzar con una letra mayúscula y consisten en caracteres alfanuméricos.
Cada parte debe imprimirse claramente separada. Se garantiza que cada parte no está vacía.
El ganador es el que usa menos bytes para resolver este problema.
Ejemplo:
Entrada: UK7898S14
Salida:
Reino Unido
7898
S14
Aquí Reino Unido es Reino Unido, 7898 es el código del producto y S14 es talla 14.
Ejemplo 2:
Entrada: cphDK1234CYELLOWS14QGOOD
Salida:
cphDK
1234
CYELLOWS14QGOOD
Aquí cphDK es Copenhague, Dinamarca, 1234 es el código del producto, CYELLOWS14QGOOD representa color amarillo, tamaño 14 y buena calidad.
Respuestas:
Perl, 12 bytes
11 bytes de código + 1 byte para
-p
bandera.Para ejecutarlo:
fuente
APL, 18
Funciona buscando los primeros 2 puntos donde hay un cambio de carácter a dígito o viceversa, y usándolos para dividir la cadena.
fuente
Retina ,
2814108 bytesGuardado 4 bytes gracias a Dom Hastings .
Guardado 2 bytes gracias a Martin Ender .
Pruébalo en línea!
fuente
Haskell, 36 bytes (sin expresiones regulares)
Esto da el resultado en el formato
("UK",("7898","S14"))
. La idea es dividir en el primer dígito, y luego dividir el resto en el primer no dígito. Pruébalo en Ideone .fuente
JavaScript,
3836 bytesEjemplo
Mostrar fragmento de código
fuente
JavaScript (ES6),
2826 bytesGuardado 2 bytes gracias a @Grax
Ejemplos
Mostrar fragmento de código
fuente
s=>s.replace(/\d+/,` $& `)
Gema,
1712 caracteres(El truco de no manejar el código de país se tomó prestado descaradamente de la solución Perl de Dada . El agradecimiento debe expresarse allí).
Ejecución de muestra:
fuente
Python 2, 40 bytes
No sé mucho Regex, pero afortunadamente este problema es bastante simple :) Separa la cadena de entrada en una lista de longitud 3 que contiene cada parte.
fuente
05AB1E ,
393716 bytesAhorré muchos bytes gracias a Emigna.
Utiliza la codificación CP-1252.
Pruébalo en línea!
(¡Esta es mi primera publicación acá!)
fuente
.páà¬
para obtener la primera parte, pero no parece ayudar para el resto a primera vista.JavaScript (ES6), 36 bytes
Ejemplos
Mostrar fragmento de código
fuente
Java 7,
200185174167 bytesUngolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
C #,
191177 bytesGolfizado:
Sin golf:
EDITAR1: @Link Ng guardó 14 bytes.
fuente
PHP, 48 bytes
Con su
$limit
parámetro y la fantásticamente útil\K
,preg_split()
es perfecto para este desafío.fuente
MATLAB,
8173 bytesFunción que acepta una cadena y devuelve una matriz de celdas de tres cadenas. Probado en la versión R20105b.
Ejemplo de uso:
Explicación
La expresión regular
(?<=^\D+)\d+')
coincide con un grupo de dígitos precedidos por no dígitos desde el comienzo de la cadena; estos últimos no son parte del partido.La cuarta salida de
regexp
es el'match'
; y la séptima salida son las'split'
dos partes de la cadena antes y después del partido.fuente
Rubí, 28 bytes.
Esto rodea el primer grupo de dígitos con nuevas líneas.
fuente
jq, 47 caracteres
(Código de 43 caracteres + opciones de línea de comando de 4 caracteres).
(Nuevamente, la vieja historia: bastante elegante al principio, luego se vuelve dolorosamente detallada).
Ejecución de muestra:
Prueba en línea (
-r
no se admite el paso por la URL; compruebe usted mismo la salida sin formato).fuente
PHP,
61 59 5655 bytesEsto también genera el código inicial:
Editar
Gracias a @manatwork por guardar algunos bytes para mí
Gracias a @ RomanGräf por otros pocos bytes guardados
fuente
[\d]
? : o\d
es suficiente.[a-z]
con\D
?[a-z]
, lai
bandera tampoco es necesaria.JavaScript sin expresión regular,
848179 bytesp=>{for(i=n=o='';i<p.length;){if(n==isNaN(c=p[i++])){o+=' ';n++}o+=c}return o}
fuente
o=n=i=''
.isNaN(c=p[i++])
.p=>{for(i=n=o=0;i<p.length;){c=p[i++];if(n++==c<59){o+=' '}o+=c}return o}
''
porque la o, a la que se concatenará el resultado. Pero lamentablemente su código no funciona para mí, n necesita incrementarse condicionalmente.p=>{for(i=n=0,o='';i<p.length;){c=p[i++];if(n==c<59){o+=' ';n++}o+=c}return o}
Mathematica, 39 bytes
Función anónima. Toma una cadena como entrada y devuelve una lista de cadenas como salida.
fuente
Raqueta 274 bytes
Sin golf:
Pruebas:
Salida:
fuente
R,
6352 bytesEditar: guardado un montón de bytes gracias a @JDL
Toma datos de stdin e imprime en stdout:
Salida de ejemplo:
fuente
gsub (...,"\\1 \\2 \\3")
sería más eficiente?gsub("([A-Za-z]+)([0-9]+)(.+)","\\1 \\2 \\3",scan())
, aunque el primer argumento probablemente puede expresarse como algo más pequeño que eso ..."\\1 \\2 \\3"
reemplazo. También actualicé un poco el patrón regex y lo uséignore.case = TRUE
.()
paréntesis."Jalea , 14 bytes
TryItOnline!
¿Cómo?
fuente
C, 107 bytes
Llamar con:
fuente
Python 2,
1039488 bytesSolución sin usar regex
Simplemente extrae los números del medio y luego corta la entrada usando el número como índice. Requiere comillas alrededor de la entrada, pero no vi en ninguna parte que las comillas no estén permitidas.
-9 dividiendo a en el número del medio y luego imprima los componentes con b en el medio
-6 Gracias a @Shebang
Casos de prueba
fuente
b!="" -> b>""
yc=a.split(b) -> c,d=a.split(b) ... print c[0],b,c[1] -> print c,b,d
ahorra 5 bytes.elif b:
;)C #, 74 bytes
Reemplace el primer conjunto de dígitos con retorno de carro, conjunto de dígitos y otro retorno de carro, como hizo Johan Karlsson para JavaScript.
fuente