Si vous ne le savez pas déjà, un quaternion est essentiellement un numéro en 4 parties. Aux fins de ce défi, il a une composante réelle et trois composantes imaginaires . Les composantes imaginaires sont représentées par le suffixe i, j, k. Par exemple, 1-2i+3j-4kest un quaternion avec 1être la composante réelle et -2, 3et -4étant les composantes imaginaires.
Dans ce défi, vous devez analyser la forme de chaîne d'un quaternion (ex. "1+2i-3j-4k") Dans une liste / tableau de coefficients (ex. [1 2 -3 -4]). Cependant, la chaîne quaternion peut être formatée de différentes manières ...
- Cela peut être normal:
1+2i-3j-4k - Il peut avoir des termes manquants:
1-3k,2i-4k(Si vous avez des termes manquants, la sortie0de ces termes) - Il peut avoir des coefficients manquant:
i+j-k(Dans ce cas, cela équivaut à1i+1j-1kAutrement dit, un.i,jOuksans numéro devant est supposé avoir une1face par défaut) - Ce n'est peut-être pas dans le bon ordre:
2i-1+3k-4j - Les coefficients peuvent être simplement des entiers ou des décimales:
7-2.4i+3.75j-4.0k
Il y a certaines choses à noter lors de l'analyse:
- Il y aura toujours un
+ou-entre les termes - Vous recevrez toujours une entrée valide avec au moins 1 terme et sans lettres répétées (pas de
j-js) - Tous les nombres peuvent être considérés comme valides
- Vous pouvez modifier les numéros dans une autre forme après l' analyse syntaxique si vous voulez (ex.
3.0 => 3,0.4 => .4,7 => 7.0)
Les analyses intégrées / quaternion et les failles standard sont interdites. Cela inclut les evalmots clés et les fonctions. L'entrée sera une chaîne unique et la sortie sera une liste, un tableau, des valeurs séparées par des espaces, etc.
Comme il s'agit de code-golf , le code le plus court en octets l'emporte.
Des tonnes de cas de test
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]
+.
-0une partie de la production légale pour les deux derniers exemples?
evalrestriction à prendre dans une chaîne, interprète comme code et / ou entrée. Toutes les conversions ne comptent pas en dessous car vous ne pouvez pas passer, par exemple, la chaîne "test"à une fonction de conversion d'entier pour recevoir un entier, mais testserait interprété comme du code dans une evalfonction normale . TLDR: eval: non, conversions de type: oui.
+signes inutiles dans l'entrée? Comme+1k:?