No odies cuando quieras copiar y pegar una lista de números (vector, matriz ...), de un programa a otro, pero el formato en el que tienes los números no coincide con el formato en el que lo necesitas ?
Por ejemplo, en MATLAB puede tener una lista separada por espacios como esta:
[1 2 3 4 5] (you can also have it comma separated, but that's not the point)
En Python, necesitaría insertar comas para hacer que esa lista sea una entrada válida, por lo que tendría que convertirla a
[1, 2, 3, 4, 5]
para que funcione En C ++ es posible que desee algo como:
{16,2,77,29}
y así.
Para simplificar la vida de todos, creemos un convertidor de listas, que tome una lista en cualquier formato * y genere una lista en otro formato especificado.
Los corchetes válidos son:
[list]
{list}
(list)
<list>
list (no surrounding brackets)
Los delimitadores válidos son:
a,b,c
a;b;c
a b c
a, b, c <-- Several spaces. Must only be supported as input.
a; b; c <-- Several spaces. Must only be supported as input.
a b c <-- Several spaces. Must only be supported as input.
Nota, la entrada puede tener cualquier número de espacios entre los números, pero la salida puede optar por tener cero espacios (si ,
o ;
se utiliza como delimitador), o un solo espacio (si es el espacio delimitado).
Además de la lista de entrada, habrá una cadena (o dos caracteres) que define el formato de salida. La cadena de formato será primero ser el tipo corchete de apertura (solamente), [
, (
, <
, {
o (el último es un único espacio utiliza cuando no hay soporte circundante). El tipo de paréntesis será seguido por el tipo de delimitador
,
, ;
o (el último es un espacio único). Los dos caracteres de formato de entrada deben tomarse como un solo argumento (cadena o dos caracteres consecutivos) en el orden descrito anteriormente.
Algunos ejemplos de cadenas de formato:
[, <-- Output format: [a,b,c]
{; <-- Output format: {a;b;c}
<-- Two spaces, output list has format: a b c
Reglas:
- La salida no puede tener espacios iniciales
- La salida puede tener espacios finales y una nueva línea
- La salida solo debe ser la lista de números, no
ans =
similar
- La salida solo debe ser la lista de números, no
- La entrada será una lista de números enteros o decimales (tanto positivos como negativos (y cero)), y una cadena de dos caracteres
- Si la entrada consta de solo enteros, la lista de salida debe tener solo enteros. Si la lista de entrada consta de números enteros y decimales, todos los números de salida pueden ser números decimales. (Es opcional mantener los enteros como enteros)
- El número máximo de dígitos después del punto decimal que debe admitirse es 3.
- La entrada será dos argumentos. Es decir, los números están en un argumento, y la cadena de formato es un argumento único.
- El código puede ser un programa o función
- La entrada puede ser argumento de función o STDIN
Algunos ejemplos:
1 2 3 4
[,
[1,2,3,4]
<1; 2; 3>
; <-- Space + semicolon
1;2;3
not valid: 1.000;2.000;3.000 (Input is only integers => Output must be integers)
{-1.3, 3.4, 4, 5.55555555}
[,
[-1.300,3.400,4.000,5.556] (5.555 is also valid. Rounding is optional)
also valid: [-1.3,3.4,4,5.55555555]
El código más corto en bytes gana. Como siempre, el ganador será seleccionado una semana a partir del día en que se publicó el desafío. Las respuestas que se publican más tarde aún pueden ganar si son más cortas que el ganador actual.
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
_
para denotar elementos negativos. :(Respuestas:
CJam, 27 bytes
Pruébalo aquí
Explicación
fuente
JavaScript (ES6), 75
82Como una función anónima
Editar: 2 bytes guardados thx @ user81655 (y 5 más solo revisándolo)
Fragmento de prueba
fuente
CJam,
3534 bytesPruébalo aquí.
Espera el formato en la primera línea y la lista en la segunda.
Explicación
fuente
Pyth, 33 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
PowerShell,
1081009585 Bytes(ver historial de revisiones para versiones anteriores)
Golfed otros 15 bytes mediante la eliminación
$b
y$s
las variables y cambiando parens en la cadena interior.Esto toma la entrada como dos cadenas y las almacena en ,
$i
y$z
luego construimos una nueva cadena de salida. El parente interno-split
s$i
con una expresión regular para seleccionar solo dígitos numéricos, luego se-join
vuelve a juntar con el delimitador solicitado. Concatenamos eso con el primer carácter de la entrada del delimitador (por ejemplo,[
) y lo cerramos con indexación en una cadena basada en el valor ASCII del primer carácter y algunos trucos de formulación. El exterior.Trim()
elimina los espacios iniciales o finales.fuente
"]})>"["[{(< ".IndexOf($b[0])]
con algo así' }) >]'[($b[0]-32)%6]
. El($b[0]-32)%6
le da0,2,4,5,1
para abrir caracteres de corchetes, que puede usar para indexar en la cadena de corchetes de cierre' }) >]'
. Puede haber una "fórmula" más corta, pero esto parece lo suficientemente bueno.()
estar uno al lado del otro, pero los otros paréntesis tienen un carácter intermedio, así que seguí con la indexación. ¡Gracias!String.Replace()
lugar del-replace
operador le compraría otros 2 bytes (no es necesario escapar o definir una clase de caracteres con[]
).Replace('[]{}()<>;,',' ')
no capturará caracteres individuales sino que intentará hacer coincidir el todo simbólico, que no existe. Necesitaríamos usar Regex.Replace , que implica una[regex]::
llamada .NET y, en cambio, alargaría el código.-ne''
lugar de|?{$_}
.Python 2, 96 bytes
Llamar como:
Salida:
fuente
JavaScript (ES6),
829211692 bytesUna función anónima, ejecútela así
Esto probablemente se puede jugar mucho más golf ..
Sin golf
fuente
The input will be a list of integer or decimal numbers (both positive and negative (and zero)), and a string of two characters
. Solucionado, graciasMathematica, 108 bytes
Mathematica es generalmente torpe con las entradas de cadena a menos que la cadena se interprete como un texto.
Explicación
StringCases[t,NumberString]
devuelve la lista de cadenas de números.Riffle
inserta los separadores entre los números./.Thread[c@"[ {<(" -> c@"] }>)"])
reemplaza el "soporte" izquierdo con el soporte derecho.<>
es la forma infija deStringJoin
. Pega las subcadenas juntas.fuente
Matlab, 85 bytes
Ejemplo de uso:
fuente
Julia, 95 bytes
Esta es una función
f
que acepta dos cadenas y devuelve una cadena.Sin golf:
fuente
Bash + GNU Utilities, 90
fuente