Se você ainda não sabe, um quaternion é basicamente um número de 4 partes. Para os propósitos deste desafio, ele possui um componente real e três componentes imaginários . Os componentes imaginários são representados pelo sufixo i
, j
, k
. Por exemplo, 1-2i+3j-4k
é um Quatérnion com 1
sendo a componente real e -2
, 3
, e -4
sendo os componentes imaginárias.
Neste desafio, você deve analisar a forma de string de um quaternion (ex. "1+2i-3j-4k"
) Em uma lista / matriz de coeficientes (ex. [1 2 -3 -4]
). No entanto, a cadeia de quaterniões pode ser formatada de várias maneiras diferentes ...
- Pode ser normal:
1+2i-3j-4k
- Ele pode ter termos ausentes:
1-3k
,2i-4k
(Se você tem termos ausentes, a saída0
para esses termos) - Pode ter coeficientes faltando:
i+j-k
(Neste caso, isso é equivalente a1i+1j-1k
Em outras palavras, a.i
,j
Ouk
sem um número na frente Assume-se que um1
em frente por padrão) - Pode não estar na ordem correta:
2i-1+3k-4j
- Os coeficientes podem ser simplesmente números inteiros ou decimais:
7-2.4i+3.75j-4.0k
Há algumas coisas a serem observadas ao analisar:
- Sempre haverá um
+
ou-
entre termos - Você sempre receberá entrada válida com pelo menos 1 termo e sem letras repetidas (no
j-j
s) - Todos os números podem ser considerados válidos
- Você pode mudar os números em uma outra forma após a análise se você quiser (ex.
3.0 => 3
,0.4 => .4
,7 => 7.0
)
Os recursos de análise / quaternião e brechas padrão não são permitidos. Isso inclui eval
palavras-chave e funções. A entrada será uma única sequência e a saída será uma lista, uma matriz, valores separados por espaços em branco, etc.
Como esse é o código-golfe , o código mais curto em bytes vence.
Toneladas de casos de teste
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
parte da produção legal dos dois últimos exemplos?
eval
restrição a ser aceita em uma string, interpreta como código e / ou entrada. Todas as conversões não contam com isso porque você não pode passar, por exemplo, a string "test"
para uma função de conversão de número inteiro para receber um número inteiro, mas test
seria interpretada como código em uma eval
função normal . TLDR: eval: não, digite conversões: sim.
+
sinais desnecessários na entrada? Como+1k
:?