He escrito algunos desafíos relacionados con las matrices, y común para todos es que utilizo un formato como el siguiente cuando represento las matrices, tanto en ejemplos como en casos de prueba:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Este es probablemente un formato engorroso en muchos idiomas.
Desafío:
Escriba un programa / función que pueda tomar una matriz en la forma dada en la parte superior como entrada (directamente copiada / pegada de esta publicación), y genere la misma matriz en los otros tres formatos convencionales que se muestran a continuación .
El formato de entrada:
Números separados por un número variable de espacios y nuevas líneas para representar filas (ver casos de prueba).
- No se garantiza que el número de espacios entre números sea consistente. Sin embargo, puede suponer que el último dígito en cada columna se alinea (si eso ayuda a alguno).
- Puede haber enteros y flotantes, y pueden ser positivos, negativos o cero. Una matriz no contendrá enteros y flotantes al mismo tiempo.
- Puede suponer que ningún número tiene más de 10 caracteres, incluidos el punto negativo y el decimal para flotantes negativos.
- Puede suponer que hay el mismo número de entradas en cada fila y en cada columna.
- No habrá matrices de entrada vacías, pero puede haber números únicos o matrices con solo una fila o columna.
- En estos casos, puede elegir entre los formatos de salida que se muestran en los casos de prueba
Su programa / función debe manejar la entrada si se copia directamente de esta publicación y se pega en el intérprete (STDIN o como argumento de función o algo equivalente). Puede tener lo que quiera (corchetes, comillas, paréntesis) delante y / o después de la matriz, pero debe considerar la matriz como una secuencia de caracteres que no se pueden alterar (que incluye las nuevas líneas).
Para aclarar: suponga que se llama a su función / programa f
y que la matriz es:
1 -2
3 5
6 7
entonces puede dar la matriz como argumentos de función como este (y muchas otras opciones infinitas):
f(1 -2
3 5
6 7)
f([1 -2
3 5
6 7])
f("""1 -2
3 5
6 7""")
Si su idioma no puede, de ninguna manera, tomar la matriz copiada / pegada como entrada, entonces me temo que debe elegir otro idioma.
El formato de salida:
Debe generar la matriz en los siguientes tres formatos (el orden no importa):
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
- Puede separar las tres salidas como desee (por ejemplo, una nueva línea)
- Debe generar los números con la misma precisión que la entrada (por ejemplo, no debe recortar el número de decimales, ni generar enteros como flotantes).
- Los espacios son obligatorios.
- Debe usar
-
para números negativos, no_
o similares.
Casos de prueba:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
----
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
0.14778 0.27114 0.24415
0.45997 0.12287 0.67470
0.28945 0.37928 0.51887
----
[[0.14778, 0.27114, 0.24415], [0.45997, 0.12287, 0.6747], [0.28945, 0.37928, 0.51887]]
{{0.14778, 0.27114, 0.24415}, {0.45997, 0.12287, 0.6747}, {0.28945, 0.37928, 0.51887}}
[0.14778, 0.27114, 0.24415; 0.45997, 0.12287, 0.6747; 0.28945, 0.37928, 0.51887]
-0.0398301 0.2403455 -0.2253368 0.3565870 0.0605803 0.0830780
-0.3254422 -0.1185191 -0.2989537 0.1647319 0.3621135 0.2018815
-0.0022281 -0.3362287 -0.3568447 0.4419063 0.3801872 -0.2847033
---
[[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780], [-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815], [-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033],]
{{-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780}, {-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815}, {-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033},}
[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780; -0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815; -0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033]
0 4 1 0
0 0 -6 0
0 1 4 -3
2 0 0 8
0 0 0 0
----
[[0, 4, 1, 0], [0, 0, -6, 0], [0, 1, 4, -3], [2, 0, 0, 8], [0, 0, 0, 0]]
{{0, 4, 1, 0}, {0, 0, -6, 0}, {0, 1, 4, -3}, {2, 0, 0, 8}, {0, 0, 0, 0}}
[0, 4, 1, 0; 0, 0, -6, 0; 0, 1, 4, -3; 2, 0, 0, 8; 0, 0, 0, 0]
1
----
[1] (or [[1]])
{1} (or {{1}})
[1] (or 1)
1 2
----
[1, 2] (or [[1, 2]])
{1, 2} (or {{1, 2}})
[1, 2]
4
5
----
[[4], [5]]
{{4}, {5}}
[4; 5]
Soy plenamente consciente de esto , pero en este desafío, el formato de E / S engorroso es el punto. El desafío consistirá en formatear la salida en algunos idiomas, mientras que leer la entrada será la parte más difícil en otros idiomas.
No se desanime si leer la entrada es difícil, esas presentaciones pueden ser las más interesantes. Corto no es necesariamente lo mismo que impresionante. Y como siempre, ¡se alientan las explicaciones!
Japt ,
6353 bytesEsto llegaba a 44 bytes antes de notar que el espacio en la salida era obligatorio.
Pruébalo
Explicación
fuente
Perl 5 , 71 bytes
69 bytes de código +
-p0
banderas.Pruébalo en línea!
Explicaciones
s/^ *(.+)/[$1]/gm;
agrega[]
alrededor de cada línea mientras elimina los espacios iniciales.s/\s+/, /g;
reemplaza series de espacios y líneas nuevas con una coma y un espacio.La primera salida se obtiene entonces por circundante con los apoyos:
[$_]
.El segundo necesita reemplazar las llaves con una llave (
y/[]/{}/r
) y rodear con llaves"{" ... "}"
.Para el tercero,
], [
se reemplaza con un punto y coma y un espacio (s/], \[/; /gr
).Después de escribir esta solución, intenté adaptar la respuesta Retina de Martin Ender, pero terminó 10 bytes más ( TryItOnline ):
Para esta versión, vea la respuesta de Martin para las explicaciones.
fuente
MATL , 60 bytes
Pruébalo en línea!
Muchas gracias a Luis Mendo por eliminar una cuarta parte de mi bytecount en una clase magistral en el chat.
Pegue la entrada, seguida de una línea vacía.
fuente
05AB1E ,
4544 bytesPruébalo en línea!
Primera salida
Segunda salida
Tercera salida
fuente
Python 2 , 143 bytes
Pruébalo en línea!
fuente
Javascript (ES6),
121110106 bytes-15 bytes gracias a @Shaggy y @Justin
Fragmento de código de ejemplo:
fuente
map(x=>x.trim().replace(/ +/g,", "))
amap(x=>x.match(/\S+/g).join`, `)
.Pitón 2 ,
163152150145 bytes-5 bytes gracias a Felipe Nardi Batista que sugirió el uso de símbolos (lo siento, solo necesito una excusa para decir esa palabra: P).
Pruébalo en línea!
fuente
Python 3 ,
184 178 174 173 169 163 * 157 *153 bytesFormato de entrada / salida: Salida con un espacio entre las matrices y entrada con esta llamada de función (como se muestra en TIO):
Esta es la función:
Pruébalo en línea!
* * Guardado 6 bytes gracias a @officialaimm (de 169 a 163 bytes).
* Guardado 4 bytes gracias a @FelipeNardiBatista.
Explicación por venir después de más golf.
fuente
C, 415 bytes
Es un monstruo y muuuy largo tiempo, pero ya terminé. Debería haber optado por un enfoque diferente probablemente.
Pruébalo en línea!
Segundo caso de prueba | Tercer caso de prueba | Cuarto caso de prueba | Quinto caso de prueba | Sexto caso de prueba | Séptimo caso de prueba
fuente
Jalea , 37 bytes
Un programa completo que imprime los tres formatos en tres líneas.
Pruébalo en línea!
¿Cómo?
fuente
V , 41 bytes
Pruébalo en línea!
Explicación
fuente
R , 132 bytes
Pruébalo en línea!
Una función anónima. Toma entrada como
Los imprime en el mismo orden que los casos de prueba, pero con espacios como separador.
Explicación:
Primero intercambia espacios con
,
y guarda el resultado comoy
. Luego intercambia líneas nuevas con], [
, pone[[
y]]
en cualquier extremo, y guarda el resultado de eso comoz
.A continuación,
chartr
cambia[
con{
y]
con}
inz
.Finalmente, toma
y
, intercambia nuevas líneas con;
y pone[
y]
en cualquier extremo.Luego, todos los resultados se pasan en ese orden a
cat
que los imprime, todos con un formato agradable y separados por un solo espacio.Ligeramente no golfista:
fuente
Java 8 con Netbeans 8+, 209 bytes
El recuento es 208 del código, más 1 bytes para ejecutarlo presionando
F6
.Respuesta engorrosa para el desafío engorroso: p
¿Cómo utilizar?
Dentro de Netbeans, pegue este código en un archivo llamado
M.java
. Luego copie la matriz que desea usar. Luego, entre los dos caracteres consecutivos""
, presionectrl
+v
según lo requiera el desafío.Ahora presiona
F6
! Esto compilará el código, lo ejecutará y generará las representaciones de matriz esperadas.fuente
\n
, haciendo que el resultado que viste. Así que no lo entiendo, para ser sincero: sMathematica, 129 bytes
Las líneas tercera y cuarta juntas definen una función pura que toma una cadena como entrada; por ejemplo, si establecemos
f=Print...&
, el último caso de prueba se llamaría como:El fragmento
analiza la cadena de entrada como una matriz (de cadenas; nunca intentamos interpretar las entradas como cantidades numéricas) y convierte la expresión resultante nuevamente en una cadena; Esto genera automáticamente el formato de salida con llaves. Luego
Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]
imprime ese formato de salida y los otros dos, separados por líneas nuevas, mediante el uso de reglas sencillas de reemplazo de cadenas.fuente
Pip ,
4946 bytes45 bytes de código, +1 para
-r
bandera.Toma información de stdin. Pruébalo en línea!
Explicación
(Este formato de explicación me parece un poco complicado, así que avíseme si algo no tiene sentido).
fuente
SCALA, 590 bytes
Fue difícil, pero creo que ya terminé
Explicación rápida: tomo la entrada rodeada de comillas triples, luego elimino los espacios no requeridos; dividir la cadena dos veces (una vez para líneas y otra para columnas); e imprimo con mis tres rutinas. Podría ser posible definir una función para mutualizar, pero no sé cómo.
Pruébalo en línea!
fuente
05AB1E , 34 bytes
Pruébalo en línea!
ε...}
ha sido reemplazadovy...})
por TIO ya que aún no se ha extraído allí.fuente
C # (.NET Core) , 214 bytes
Pruébalo en línea!
Toma la matriz como una cadena, devuelve los tres formatos como una sola cadena separada por nuevas líneas.
fuente
using System.Text.RegularExpressions
se requiere que la declaración agregue (según mi recuento) 37 bytes adicionales.Carbón , 38 bytes
Pruébalo en línea! Nota: espacio final. El enlace es a la versión detallada del código. El carbón tiene una opción de entrada multilínea delimitada usando
["""
y"""]
. Explicación:Esto toma la entrada y la prepara dividiéndola en líneas y normalizando los separadores.
Esto maneja los casos
[[ ... ], [ ... ]]
y{{ ... }, { ... }}
.Esto maneja el
[ ... ; ... ]
caso.Antes de jugar un byte con la solución anterior, solía tener dos soluciones de 39 bytes; este es el otro:
Pruébalo en línea! Nota: espacio final. El enlace es a la versión detallada del código. Explicación:
fuente