Contexte
Quaternion est un système numérique qui étend les nombres complexes. Un quaternion a la forme suivante
où sont des nombres réels et sont trois unités quaternion fondamentales . Les unités ont les propriétés suivantes:
Notez que la multiplication par quaternion n'est pas commutative .
Tâche
Étant donné un quaternion non réel , calculez au moins une de ses racines carrées.
Comment?
Selon cette réponse Math.SE , nous pouvons exprimer tout quaternion non réel sous la forme suivante:
où sont des nombres réels et est le vecteur d'unité imaginaire sous la forme avec . Un tel a la propriété , il peut donc être considéré comme l'unité imaginaire.
Alors le carré de ressemble à ceci:
Inversement, étant donné un quaternion , nous pouvons trouver la racine carrée de en résolvant les équations suivantes
qui est identique au processus de recherche de la racine carrée d'un nombre complexe.
Notez qu'un nombre réel négatif a une infinité de racines carrées de quaternion, mais un quaternion non réel n'a que deux racines carrées .
Entrée et sortie
L'entrée est un quaternion non réel. Vous pouvez le prendre comme quatre nombres réels (virgule flottante), dans l'ordre et la structure de votre choix. Non réel signifie qu'au moins l'un des est non nul.
La sortie est un ou deux quaternions qui, lorsqu'ils sont au carré, sont égaux à l'entrée.
Cas de test
Input (a, b, c, d) => Output (a, b, c, d) rounded to 6 digits
0.0, 1.0, 0.0, 0.0 => 0.707107, 0.707107, 0.000000, 0.000000
1.0, 1.0, 0.0, 0.0 => 1.098684, 0.455090, 0.000000, 0.000000
1.0, -1.0, 1.0, 0.0 => 1.168771, -0.427800, 0.427800, 0.000000
2.0, 0.0, -2.0, -1.0 => 1.581139, 0.000000, -0.632456, -0.316228
1.0, 1.0, 1.0, 1.0 => 1.224745, 0.408248, 0.408248, 0.408248
0.1, 0.2, 0.3, 0.4 => 0.569088, 0.175720, 0.263580, 0.351439
99.0, 0.0, 0.0, 0.1 => 9.949876, 0.000000, 0.000000, 0.005025
Généré à l'aide de ce script Python . Une seule des deux bonnes réponses est spécifiée pour chaque cas de test; l'autre est la négation des quatre valeurs.
Critère de notation et de victoire
Les règles de code-golf standard s'appliquent. Le programme ou la fonction la plus courte en octets dans chaque langue gagne.
la source
a, (b, c, d)
?a,[b,[c,[d]]]
va, si vous pouvez en quelque sorte économiser des octets :)Réponses:
APL (NARS) , 2 octets
√
NARS a un support intégré pour les quaternions. ¯ \ _ (⍨) _ / ¯
la source
¯\_(⍨)√¯
Python 2 , 72 octets
Essayez-le en ligne!
Plus ou moins une formule brute. J'ai pensé que je pourrais utiliser des listes de compréhension pour boucler
b,c,d
, mais cela semble être plus long. Python est vraiment blessé ici par un manque d'opérations vectorielles, en particulier la mise à l'échelle et la norme.Python 3 , 77 octets
Essayez-le en ligne!
La résolution directe du quadratique était également plus courte que l'utilisation de la racine carrée de nombre complexe de Python pour le résoudre comme dans l'énoncé du problème.
la source
(s*s).sum()**.5
.Wolfram Language (Mathematica) , 19 octets
Essayez-le en ligne!
Mathematica intègre également Quaternion, mais est plus détaillé.
Bien que les intégrés aient l'air cool, faites des solutions de vote positif qui n'utilisent pas trop les intégrés! Je ne veux pas que les votes sur les questions qui parviennent à HNQ soient faussés.
la source
JavaScript (ES7),
5553 octetsBasé sur la formule directe utilisée par xnor .
Prend l'entrée comme un tableau.
Essayez-le en ligne!
Comment?
Et retourne:
la source
Haskell , 51 octets
Essayez-le en ligne!
Une formule directe. L'astuce principale pour exprimer la partie réelle de la sortie en
r/sqrt(r*2)
parallèle à l'expression de la partie imaginaire, ce qui économise quelques octets sur:54 octets
Essayez-le en ligne!
la source
Fusain , 32 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Port de la réponse Python @ xnor. Explication:
Convertissez les valeurs en chaîne et imprimez implicitement.
la source
Java 8, 84 octets
Port de la réponse Python 2 de @xnor .
Essayez-le en ligne.
Explication:
la source
05AB1E , 14 octets
Port de la réponse Python 2 de @xnor .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Wolfram Language (Mathematica) , 28 octets
Port de la réponse @ xnor Python 2 .
Essayez-le en ligne!
la source
C # .NET, 88 octets
Port de ma réponse Java 8 , mais renvoie un tuple au lieu d'une chaîne. Je pensais que cela aurait été plus court, mais malheureusement, cela
Math.Sqrt
nécessite uneSystem
importation en C # .NET, se terminant par 4 octets de plus au lieu de 10 octets de plus ..>.>La déclaration lambda a l'air assez drôle, cependant:
Essayez-le en ligne.
la source
Perl 6 , 49 octets
Essayez-le en ligne!
Fonction curry prenant l'entrée comme
f(b,c,d)(a)
. Renvoie le quaternion sous la formea,(b,c,d)
.Explication
la source