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-4k
es un cuaternión con 1
ser el componente real y -2
, 3
y -4
siendo 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ón0
de tales condiciones) - Puede haber coeficientes falta:
i+j-k
(En este caso, esto es equivalente a1i+1j-1k
En otras palabras, a.i
,j
Ok
sin un número delante se asume que tiene un1
frente 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-j
s) - 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 eval
palabras 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]
+
.
-0
Forma parte del resultado legal de los dos últimos ejemplos?
eval
restricció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 test
se interpretaría como código en una eval
función normal . TLDR: eval: no, conversiones de tipo: sí.
+
signos innecesarios en la entrada? Así como:+1k
?