C'est une connaissance ancienne que chaque entier non négatif peut être réécrit comme la somme de quatre entiers carrés. Par exemple, le nombre 1 peut être exprimé comme . Ou, en général, pour tout entier non négatif , il existe des entiers tels que
Joseph-Louis Lagrange l'a prouvé dans les années 1700 et c'est ce qu'on appelle souvent le théorème de Lagrange .
Ceci est parfois discuté en relation avec les quaternions - un type de nombre découvert par William Hamilton dans les années 1800, représenté par où sont des nombres réels, et et sont des unités imaginaires distinctes qui ne se multiplient pas commutativement. Plus précisément, elle est discutée en relation avec la quadrature de chaque composant du quaternion Cette quantité est parfois appelée la norme, ou la norme au carré , ou aussi la quadrance . Certaines preuves modernes du théorème de Lagrange utilisent des quaternions.
Rudolf Lipschitz a étudié les quaternions avec uniquement des composants entiers, appelés quaternions de Lipschitz. En utilisant quadrance, nous pouvons imaginer que chaque quaternion de Lipschitz peut être pensé comme ayant un ami dans les nombres entiers. Par exemple, quaternion peut être considéré comme associé à l'entier . De plus, si nous reculons, chaque entier peut être considéré comme ayant un ami dans les quaternions de Lipschitz.
Mais il y a un détail intéressant du théorème de Lagrange - la sommation n'est pas unique. Chaque entier peut avoir plusieurs ensembles différents de quatre carrés qui peuvent être additionnés pour le créer. Par exemple, le nombre 1 peut être exprimé de 4 façons en utilisant des entiers non négatifs (considérons uniquement les non négatifs pour ce défi):
Les sommets sont toujours des carrés de 0 ou 1, mais ils peuvent se trouver à différentes positions dans l'expression.
Pour ce défi, «trions» aussi nos sommets du plus bas au plus haut, pour éliminer les doublons, afin que nous puissions considérer, pour cet exercice, que 1 n'a qu'une seule façon d'être représenté comme la somme de quatre carrés:
Un autre exemple est le nombre 42, qui peut être exprimé de quatre façons (encore une fois, en ne considérant que les a, b, c, d non négatifs et en éliminant les arrangements de composants en double)
Et si nous imaginions chacune de ces différentes manières d'exprimer un entier comme étant associée à un quaternion spécifique? On pourrait alors dire que le nombre 42 est associé à ces quatre quaternions:
Si nous imaginons l'interprétation graphique standard d'un quaternion, où , et sont des vecteurs dans l'espace euclidien tridimensionnel, et donc les composantes , et du quaternion sont des coordonnées cartésiennes tridimensionnelles , alors nous pouvons imaginer que chaque entier, à travers ce processus de pensée, peut être associé à un ensemble de coordonnées tridimensionnelles dans l'espace. Par exemple, le nombre 42 est associé aux quatre : x y z ( x , y , z ) ( 1 , 4 , 5 ) , ( 1 , 2 , 6 ) , ( 3 , 4 , 4 ) , ( 2 , 3 , 5 )
Cela peut être considéré comme un nuage de points ou un ensemble de points dans l'espace. Maintenant, une chose intéressante à propos d'un ensemble de points finis dans l'espace est que vous pouvez toujours dessiner une boîte englobante minimale autour d'eux - une boîte qui est assez grande pour contenir tous les points, mais pas plus grande. Si vous imaginez la boîte comme étant une boîte ordinaire alignée sur les axes , elle est appelée boîte englobante alignée sur l'axe . La boîte englobante a également un volume, calculable en déterminant sa largeur, sa longueur et sa hauteur, et en les multipliant ensemble.
On peut alors imaginer le volume d'une boîte englobante pour les points formés par nos quaternions. Pour l'entier 1, nous avons, en utilisant les critères de cet exercice, un quaternion dont la quadrance est 1, . Ceci est un nuage de points très simple, il n'a qu'un seul point, donc sa boîte englobante a le volume 0. Pour l'entier 42, cependant, nous avons quatre quaternions, et donc quatre points, autour desquels nous pouvons dessiner une boîte englobante. Le point minimum de la boîte est et le maximum est ce qui donne une largeur, une longueur et une hauteur de 2, 2 et 2, ce qui donne un volume de 8.
Disons que pour un entier , le qvolume est le volume de la boîte englobante alignée sur l'axe de tous les points 3D formés par des quaternions qui ont une quadrance égale à , où les composants du quaternion sont non négatifs et .
Créez un programme ou une fonction qui, étant donné un seul entier non négatif , produira le volume de .
Exemples:
input -> output
0 -> 0
1 -> 0
31 -> 4
32 -> 0
42 -> 8
137 -> 96
1729 -> 10032
C'est le code-golf, le plus petit nombre d'octets gagne.
la source
Réponses:
Wolfram Language (Mathematica) ,
6758 octetsEssayez-le en ligne!
la source
Gelée , 17 octets
Essayez-le en ligne! (assez lent - faites-le assez vite pour tous les cas de test avec un interligne
½
)Comment?
la source
Haskell ,
132123 octetsEssayez-le en ligne!
Solution assez simple. Brute force toutes les solutions possibles en itérant sur toutes les valeurs de 0 à n (manière exagérée mais nombre de bits plus court). Je produis le point sous forme de liste afin que nous puissions utiliser l'
(!)
opérateur magique de @ Lynn . Cet opérateur réduit chaque dimension avec la fonction sur le côté gauche etmax!p
renvoie donc une liste de taille 3 qui se compose des maximums le long de chaque dimension etmin!p
fait de même pour le minimum. Ensuite, nous trouvons simplement la taille minimale dans chaque dimension (en soustrayant la valeur min du max avecz(-)
) et les multiplions ensemble.Merci beaucoup à @Lynn pour avoir décollé 9 octets avec une magie de zip pliable!
la source
zipWith
logique. 123 octetsSledgehammer 0,2, 12 octets
À utiliser avec Mathematica 11.2 et cette version de Sledgehammer, qui est antérieure au défi. Voir l'historique des modifications pour une version qui fonctionne dans la version 0.3, qui a une interface graphique et génère une expression Mathematica.
Cela pousse l'entrée dans la pile et appelle la séquence de commandes
ce qui équivaut à évaluer le code Wolfram suivant dérivé de ma réponse Wolfram Language :
Essayez-le en ligne!
la source
Python 2 , 138 octets
Essayez-le en ligne!
Génère récursivement les quaternions triés inversement avec la norme donnée, puis prend le produit entre le max et le min de toutes les valeurs possibles dans les trois premiers indices.
itertools
aurait pu avoir un coup de feu s'il n'a pas utilisé des noms ridiculement longs commeitertools.combinations_with_replacement
Python 2 , 161 octets
Essayez-le en ligne!
C'est pourquoi
itertools
n'est jamais la réponse .la source
JavaScript (ES6),
148143 octetsEssayez-le en ligne!
Commenté
Étape 1
Étape 2
la source
C # (Visual C # Interactive Compiler) , 229 octets
Essayez-le en ligne!
la source
05AB1E , 18 octets
Essayez-le en ligne!
Réponse de Jelly du port de Jonathan Allan .
la source
Haskell , 108 octets
Essayez-le en ligne! (expire sur les plus grands cas de test)
Il y a quelques optimisations étranges ici. Pour calculer
maximum l-minimum l
la listel
des éléments à une position donnée, il s'avère plus court dans le contexte de les convertir tous les deux en maxima en annulant le deuxième terme:,maximum l+maximum(map((-1)*))l
ou de manière équivalentesum[maximum$map(b*)l||b<-[-1,1]]
.Pour multiplier les trois dimensions, il s'avère plus court de simplement écrire le produit
f n=n%0*n%1*n%2
que d'utiliser n'importe quelle sorte de boucle. Ici,n%i
c'est la différence entre le min et le max desi
valeurs de coordonnées th, qui sont extraites avec l'indexation!!i
.Pour générer les quatre tuples valides, nous prenons des listes de quatre nombres
[0..n]
dont les carrés totalisentn
et sont en ordre décroissant. Nous vérifions le tri inverse det
withscanr1 max t==t
, qui voit si le maximum courant de l'inverse est lui-même, car Haskell n'a pas de tri intégré sans importation coûteuse. J'ai essayé différentes façons de générer récursivement les quatre tuples comme dans mes réponses Python, mais elles étaient toutes plus longues que cette méthode de génération et de filtrage par force brute.la source