Si aún no lo sabe, un cuaternión es básicamente un número de 4 partes. Para los propósitos de este desafío, tiene un componente real y tres componentes imaginarios . Los componentes imaginarios son representados por el sufijo i, j, k. Por ejemplo, 1-2i+3j-4kes un cuaternión con 1ser el componente real y -2, 3y -4siendo los componentes imaginarios.
En este desafío, debe analizar la forma de cadena de un cuaternión (ej. "1+2i-3j-4k") En una lista / matriz de coeficientes (ej. [1 2 -3 -4]). Sin embargo, la cadena de cuaternión se puede formatear de muchas maneras diferentes ...
- Puede ser normal:
1+2i-3j-4k - Puede tener términos que faltan:
1-3k,2i-4k(Si usted tiene términos que faltan, la producción0de tales condiciones) - Puede haber coeficientes falta:
i+j-k(En este caso, esto es equivalente a1i+1j-1kEn otras palabras, a.i,jOksin un número delante se asume que tiene un1frente de forma predeterminada) - Puede no estar en el orden correcto:
2i-1+3k-4j - Los coeficientes pueden ser simplemente enteros o decimales:
7-2.4i+3.75j-4.0k
Hay algunas cosas a tener en cuenta al analizar:
- Siempre habrá un
+o-entre términos - Siempre se le pasará una entrada válida con al menos 1 término y sin letras repetidas (sin
j-js) - Se puede suponer que todos los números son válidos
- Puede cambiar los números en otra forma después de analizar si lo desea (por ej.
3.0 => 3,0.4 => .4,7 => 7.0)
Se prohíben las funciones integradas de análisis / cuaternión y las lagunas estándar. Esto incluye evalpalabras clave y funciones. La entrada será una sola cadena y la salida será una lista, una matriz, valores separados por espacios en blanco, etc.
Como se trata de código de golf , gana el código más corto en bytes.
Toneladas de casos de prueba
1+2i+3j+4k => [1 2 3 4]
-1+3i-3j+7k => [-1 3 -3 7]
-1-4i-9j-2k => [-1 -4 -9 -2]
17-16i-15j-14k => [17 -16 -15 -14]
7+2i => [7 2 0 0]
2i-6k => [0 2 0 -6]
1-5j+2k => [1 0 -5 2]
3+4i-9k => [3 4 0 -9]
42i+j-k => [0 42 1 -1]
6-2i+j-3k => [6 -2 1 -3]
1+i+j+k => [1 1 1 1]
-1-i-j-k => [-1 -1 -1 -1]
16k-20j+2i-7 => [-7 2 -20 16]
i+4k-3j+2 => [2 1 -3 4]
5k-2i+9+3j => [9 -2 3 5]
5k-2j+3 => [3 0 -2 5]
1.75-1.75i-1.75j-1.75k => [1.75 -1.75 -1.75 -1.75]
2.0j-3k+0.47i-13 => [-13 0.47 2.0 -3] or [-13 .47 2 -3]
5.6-3i => [5.6 -3 0 0]
k-7.6i => [0 -7.6 0 1]
0 => [0 0 0 0]
0j+0k => [0 0 0 0]
-0j => [0 0 0 0] or [0 0 -0 0]
1-0k => [1 0 0 0] or [1 0 0 -0]
+.
-0Forma parte del resultado legal de los dos últimos ejemplos?
evalrestricción que se toma en una cadena, se interpreta como código y / o entrada. Cualquier conversión no cuenta bajo esto porque no puede pasar, por ejemplo, la cadena "test"a una función de conversión de enteros para recibir un entero, pero testse interpretaría como código en una evalfunción normal . TLDR: eval: no, conversiones de tipo: sí.
+signos innecesarios en la entrada? Así como:+1k?