Séquence OEIS associée: A008867
Nombre triangulaire tronqué
Une propriété commune des nombres triangulaires est qu'ils peuvent être disposés en triangle. Par exemple, prenez 21 et disposez-les dans un triangle de o
s:
o oo ooo oooo ooooo oooooo
Définissons une "troncature:" coupant des triangles de la même taille à partir de chaque coin. Une façon de tronquer 21 est la suivante:
. . . ooo oooo . ooo. . . oo. .
(Les triangles de .
sont coupés de l'original).
Il reste 12 o
s, donc 12 est un nombre triangulaire tronqué.
Tâche
Votre travail consiste à écrire un programme ou une fonction (ou équivalent) qui prend un entier et renvoie (ou utilise l'une des méthodes de sortie standard) si un nombre est un nombre triangulaire tronqué.
Règles
- Pas de failles standard.
- L'entrée est un entier non négatif.
- Une coupe ne peut pas avoir une longueur de côté supérieure à la moitié de celle du triangle d'origine (c'est-à-dire que les coupes ne peuvent pas se chevaucher)
- Une coupe peut avoir une longueur de côté nulle.
Cas de test
Vérité:
0
1
3
6
7
10
12
15
18
19
Falsy:
2
4
5
8
9
11
13
14
16
17
20
Cas de test pour tous les nombres entiers jusqu'à 50: TIO Link
Il s'agit de code-golf , donc les soumissions avec le plus petit nombre d'octets dans chaque langue gagnent!
la source
Réponses:
Haskell,
4645 octetsEssayez-le en ligne!
la source
Haskell , 46 octets
Essayez-le en ligne!
Après avoir jeté un tas de théorie des nombres sur le problème (merci @flawr), j'ai trouvé cette caractérisation:
Cela signifie, par exemple, que 4n-1 peut ne pas être divisible par 5 à moins qu'il ne soit divisible par 5 2 = 25 et le nombre total de 5 facteurs soit pair.
Haskell n'a pas de factorisation intégrée, mais nous pouvons improviser. Si nous travaillons avec des factorisations en puissances premières comme 12 = 3 * 4 , nous pouvons utiliser la déclaration équivalente:
On peut extraire la puissance d'un premier p apparaissant en k as
gcd(p^k)k
. On vérifie ensuite que le résultat r n'est pas 5 ou 7 modulo 12 asmod(r-5)12>2
. Notez que r est impair. Nous vérifions également les composites comme p , sans moyen de les distinguer des nombres premiers, mais la vérification passera aussi longtemps que ses facteurs le feront.Enfin, la négation
>2
de<3
et la commutationTrue
/False
sortie de sortie économise un octet en nous permettant d'utiliseror
au lieu deand
.Une caractérisation connexe est que les diviseurs de 4n-1 pris modulo 12 ont plus de 1 et 11 au total que de 5 et 7.
53 octets
Essayez-le en ligne!
la source
Python 2 , 52 octets
Essayez-le en ligne!
Sorties
True
/False
retournées. Utilise cette caractérisation:Nous vérifions si l'un d'entre eux
8*n-2+3*b*b
est un carré parfait pour n'importe lequelb
de1
àn+1
. Nous évitonsb=0
car cela donne une erreur pour une racine carrée d'un négatif quandn==0
, mais cela ne peut pas faire de mal car seul le impairb
peut fonctionner.Fait de façon non récursive:
Python 2 , 53 octets
Essayez-le en ligne!
la source
range
. Ici, c'est proche carb>n+1
c'est un cas de base long et0in
court.R ,
4543 octets-2 octets grâce à Vlo
Essayez-le en ligne!
Je suis assez sûr que nous devons seulement vérifier les premiers
n
nombres triangulaires pour cela; la force brute vérifie si sen
trouve dans les différences par paires des nombres triangulaires et de leurs triplets.la source
scan()
n<-scan();n%in%outer(T<-cumsum(0:n),3*T,"-")
Gelée , 10 octets
Un lien monadique acceptant un entier et renvoyant une valeur véridique (une liste non vide) ou une valeur de falsey (une liste vide).
Essayez-le en ligne! (le pied de page effectue une représentation Python pour afficher les
[0]
résultats tels qu'ils sont)... ou voir une suite de tests (fonctionne de 0 à 20 inclus)
Comment?
Étant donné N, forme les N premiers nombres triangulaires, soustrait N de chacun, divise chaque résultat par 3 et conserve tous les résultats qui sont l'un des N premiers nombres triangulaires.
la source
Pyt , 10 octets
Essayez-le en ligne!
Explication:
la source
ɐ-
passeHaskell , 48 octets
Essayez-le en ligne!
la source
a==1
.J , 22 octets
Essayez-le en ligne!
Approche simple et assez peu golfée.
Explication
la source
e.2,@(!-/3*!)[:i.2+]
e.2,@(!-/3*!)1+i.,]
peutMATL , 12 octets
Sorties
1
pour véridique,0
pour fausse.Essayez-le en ligne! Ou vérifiez tous les cas de test .
Comment ça marche, avec exemple
Tenez compte des commentaires
6
la source
Ruby ,
65 57 5248 octetsEssayez-le en ligne!
Inspiré par la réponse python de xnor
la source
Python 3 , 84 octets
Essayez-le en ligne!
la source
05AB1E , 11 octets
Essayez-le en ligne!
Explication
Ceci est basé sur le fait qu'un certain nombre T est triangulaire si
8T+1
est un carré parfait impair.Nous commençons sur la liste des triangles que nous pourrions tronquer, calculons les triangles les plus grands possibles en fonction d'eux et vérifions s'il est en fait triangulaire.
la source
Japt , 16 octets
Essayez-le | Vérifier tous les cas de test
Explication
Alternative
Essayez-le
la source
Ajouter ++ , 36 octets
Essayez-le en ligne!
la source