Contexte
Une grille triangulaire est une grille formée en mosaïque régulière du plan avec des triangles équilatéraux de longueur 1. L'illustration ci-dessous est un exemple de grille triangulaire.
Un point de réseau triangulaire est un sommet d'un triangle formant la grille triangulaire.
L' origine est un point fixe sur le plan, qui est l'un des points du réseau triangulaire.
Défi
À partir d'un entier non négatif n
, recherchez le nombre de points de réseau triangulaires dont la distance euclidienne par rapport à l'origine est inférieure ou égale à n
.
Exemple
La figure suivante est un exemple pour n = 7
(ne montrant qu'une zone de 60 degrés par souci de commodité, le point A étant l'origine):
Cas de test
Input | Output
---------------
0 | 1
1 | 7
2 | 19
3 | 37
4 | 61
5 | 91
6 | 127
7 | 187
8 | 241
9 | 301
10 | 367
11 | 439
12 | 517
13 | 613
14 | 721
15 | 823
16 | 931
17 | 1045
18 | 1165
19 | 1303
20 | 1459
40 | 5815
60 | 13057
80 | 23233
100 | 36295
200 | 145051
500 | 906901
1000 | 3627559
Astuce : Cette séquence n'est pas OEIS A003215 .
Règles
Les règles standard pour le golf de code s'appliquent. La soumission la plus courte gagne.
Veuillez inclure comment vous avez résolu le problème dans votre soumission.
n
. Vous avez donc deux fois plus de termes que vous le souhaitez.n^2+1
termes d' OEIS A004016 .Réponses:
Python 2 , 43 octets
Essayez-le en ligne!
C'est de la magie noire.
Offrir 250 représentants pour une preuve écrite.Voirla réponse de Lynnpour une preuve et une explication.la source
Haskell , 48 octets
Essayez-le en ligne!
Utilise la formule "magie noire" de xnor:
Une preuve de sa justesse, et une explication de la façon dont xnor a réussi à exprimer dans 43 octets de Python, peuvent être trouvés ici .
la source
Wolfram Language (Mathematica) ,
535150 octets-1 octet grâce à @miles
Essayez-le en ligne!
Comment?
Au lieu de penser à ceci:
Pensez-y comme ceci:
Nous appliquons donc la matrice
[[sqrt(3)/2, 0], [1/2, 1]]
de transformation pour transformer le deuxième chiffre en premier.Ensuite, il faut trouver le cercle dans la grille triangulaire en termes de coordonnées cartésiennes.
Donc, nous trouvons des points de réseau
x, y
tels quex^2 + x y + y^2 <= r^2
Par exemple, avec
r = 3
:la source
x^2+x y+y^2
peut également être dérivée de la loi des cosinus à 120 degrés.x^2+x y+y^2
->x(x+y)+y^2
enregistre un octetx^2 + xy + y^2
peut également être dérivée de la norme d’un nombre entier d’Eistenstein, qui esta^2 - ab + b^2
. Notez que le signe dea
etb
n'est pas pertinent sauf dans le terme, deab
sorte qu'il a le même nombre de solutions.Wolfram Language (Mathematica) , 48 octets
Basé sur OEIS A004016 .
Essayez-le en ligne!
la source
CJam (24 octets)
Il s'agit d'un bloc anonyme (fonction) qui prend un argument sur la pile et laisse le résultat sur la pile. Suite de tests en ligne . Notez que les deux plus gros cas sont trop lents.
Explication
Alephalpha a noté dans un commentaire sur la question que
Ma preuve de l'exactitude de cette formule est basée sur des informations tirées du lien OEIS d'Alephalpha:
Dissection de code
la source
J , 27 octets
Essayez-le en ligne!
Basé sur la méthode de JungHwan Min .
Explication
la source
APL (Dyalog Classic) , 23 octets
Essayez-le en ligne!
hommage à son xnor et de lynn réponses
le dernier test est commenté car il a besoin de plus de mémoire, par exemple
MAXWS=200M
dans envla source
Gelée , 14 octets
Utilise la méthode de @ JungHwanMin .
Essayez-le en ligne!
la source
Gelée ,
15 à13 octets-2 grâce à Dennis (incrémentez simplement le carré pour éviter la concaténation d'un zéro; évitez la tête en utilisant une tranche modulo post-différence plutôt qu'une tranche pré-différence)
Utilise la méthode de "magie noire" pour préciser la réponse exposée par xnor dans sa réponse en Python , mais utilise l'itération plutôt que la récursion (et un peu moins de calcul)
Un lien monadique acceptant un entier non négatif et renvoyant un entier positif.
Essayez-le en ligne! Ou voir la suite de tests .
Comment?
la source
JavaScript (ES6), 65 octets
Ceci est un port de la solution de @ JungHwanMin .
Essayez-le en ligne!
Réponse originale (ES7), 70 octets
Il suffit de parcourir la grille et de compter les points correspondants.
Essayez-le en ligne!
la source
true
au lieu de1
; 46 si on le divise également en entier). Et je ne connais pas assez bien JavaScript pour jouer au golf dans les divisions entières~~(a/b)
, mais je suis sûr qu'il existe un moyen plus court pour celles-ci aussi.Java 8, 65 octets
Port de la réponse Python 2 de @xnor .
Essayez-le en ligne.
la source
Paris / GP , 42 octets
En utilisant le intégré
qfrep
.Essayez-le en ligne!
la source
C # (compilateur interactif Visual C #) , 68 octets
Essayez-le en ligne!
Comme tout le monde, malheureusement. Je sais qu’il ya probablement une meilleure façon d’écrire cela, mais déclarer et appeler un lambda en même temps en c # n’est pas exactement quelque chose que je fais, enfin, jamais. Bien que dans ma défense, je ne peux pas penser à une bonne raison (en dehors du code golf, bien sûr) de le faire. Néanmoins, si quelqu'un sait comment vous pouvez faire cela, laissez-moi savoir et / ou voler le crédit, je suppose.
la source
Wolfram Language (Mathematica) , 39 octets
Essayez-le en ligne!
Utiliser la transformation de coordonnées de JungHwan Min et compter simplement les solutions sur les entiers.
la source
05AB1E , 15 octets
La réponse du port de @JonathanAllan Jelly , qui est elle-même un dérivé de la formule de «magie noire» de @ xnor .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source