La tâche
Étant donné un entier positif en entrée n
(de 1 à la limite de votre langue, inclusivement), retournez ou sortez le nombre maximum d'entiers positifs distincts qui totalisent n
.
Cas de test
Soit f
définir une fonction valide en fonction de la tâche:
La séquence pour f
, à partir de 1:
1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, ...
En tant que cas de test plus grand:
>>> f(1000000000) // Might not be feasible with brute-forcers
44720
Code de test
Pour tous les cas de test non explicitement fournis, la sortie de votre code doit correspondre au résultat de ce qui suit:
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
System.out.println((int) Math.floor(Math.sqrt(2*x + 1./4) - 1./2));
}
}
code-golf
math
number-theory
integer
integer-partitions
Addison Crump
la source
la source
Réponses:
05AB1E , 4 octets
Essayez-le en ligne!
Outil parfait pour le travail.
ÅT
donne la liste des Å ll T numéros riangular jusqu'au N (y compris , malheureusement , 0 aussi, sinon il serait 3 octets),g<
obtient le len g e et décrémente.la source
Gelée ,
65 octetsEssayez-le en ligne!
Assez efficace. Cette séquence s'incrémente aux nombres triangulaires, donc cela compte juste combien de nombres triangulaires sont plus petits que n .
Explication:
la source
Haskell , 26 octets
-2 octets grâce à H.PWiz.
Essayez-le en ligne!
Cela renvoie le nième élément des nombres entiers où chaque i est répliqué i + 1 fois.
la source
succ
représentesuccessor
.Brain-Flak , 36 octets
Essayez-le en ligne!
Il utilise la même structure que l'algorithme de division standard, sauf que le "diviseur" est incrémenté à chaque lecture.
la source
Pari / GP , 19 octets
Essayez-le en ligne!
la source
Brain-Flak , 82 octets
Ajout d'un espace blanc pour la "lisibilité"
Essayez-le en ligne!
la source
Gelée , 7 octets
Essayez-le en ligne!
Gelée , 9 octets
Essayez-le en ligne!
C'est plus long que
Denniset DJ, mais cette fois exprès . Très, très efficace .la source
M
.R , 28 octets
Essayez-le en ligne!
Crée le vecteur des temps
1
répétés2
,2
des3
temps répétés , ...,n
desn+1
temps répétés et prend l'nth
élément. Cela entraînera une erreur de mémoire soit parce qu'elle1:n
est trop grande, soit parce que la liste répétée avec desn*(n+1)/2 - 1
éléments est trop grande.R , 29 octets
Essayez-le en ligne!
Calcule la valeur directement, en utilisant la formule trouvée dans la réponse d'alephalpha . Cela devrait fonctionner sans problème, à part la précision numérique possible.
R , 30 octets
Essayez-le en ligne!
Compte les nombres triangulaires inférieurs ou égaux à
n
. Ce sera peut-être une erreur de mémoire si elle1:n
est suffisamment grande - par exemple,1e9
elle lanceError: cannot allocate vector of size 3.7 Gb
.la source
APL (Dyalog) , 8 octets
Essayez-le en ligne!
la source
TI-Basic, 12 octets
la source
JavaScript (Node.js) , 18 octets
Essayez-le en ligne!
la source
floor((sqrt(8x+4)-1)/2)
(votre formule) etfloor((sqrt(8x+1)-1)/2)
(formule correcte) donnent le même résultat pour chaquex
.Japt , 8 octets
Solution de formule fermée.
Essayez-le
Explication
Multipliez par 8, ajoutez 1 (
Ä
), obtenez la racine carrée (¬
), soustrayez 1 (É
) et plancher divisez le résultat par 2 (z
).Alternative, 8 octets
Port de la solution Jelly de DJMcMayhem .
Essayez-le
Générez un tableau d'entiers (
õ
) de 1 à l'entrée, réduisez cumulativement (å
) par addition (+
) et comptez (è
) les éléments inférieurs ou égaux à (§
) l'entrée (U
).la source
Befunge,
3220 octetsEssayez-le en ligne!
la source
Brain-Flak ,
705648 octetsEssayez-le en ligne!
Explication
La partie principale de ceci est l'extrait suivant que j'ai écrit:
Cela ne fera rien si le TOS est positif et changera de pile dans le cas contraire. C'est super pile impur mais ça marche. Maintenant, la partie principale du programme soustrait des nombres de plus en plus importants de l'entrée jusqu'à ce que l'entrée soit non positive. Nous démarrons l'accumulateur à 1 à chaque fois en soustrayant 1 de plus que l'accumulateur de l'entrée.
Nous pouvons mettre cela à l'intérieur de l'extrait ci-dessus
Cela est mis en boucle pour qu'il s'exécute jusqu'à ce que nous changions de pile. Une fois la boucle terminée, nous récupérons l'accumulateur en changeant de pile et en supprimant les fichiers indésirables.
la source
Pyth , 7 octets
Essayez-le en ligne!
Filtrez-gardez les partitions entières qui sont
I
nvariantes par rapport à la déduplication, saisissez l'h
ead et obtenez sonl
ength.Preuve de validité
Pas très rigoureux ni bien formulé.
Soit A = a 1 + a 2 + ... + a n et B = b 1 + b 2 + ... + b m soit deux partitions distinctes d'un même nombre entier N . Nous supposerons que A est la partition unique la plus longue . Après nous dédupliquer B , qui est, remplacer plusieurs occurrences du même entier avec un seul d'entre eux, nous savons que la somme de B est inférieure à N . Mais nous savons également que le résultat de la fonction augmente (non strictement), nous pouvons donc déduire que la partition unique A la plus longue a toujours au moins la même quantité d'éléments que le nombre d'éléments uniques dans d'autres partitions.
la source
Triangularité , 49 octets
Essayez-le en ligne!
Comment ça fonctionne
La triangularité nécessite que le code ait une distribution triangulaire des points. Autrement dit, la longueur de chaque ligne doit être égale au nombre de lignes multiplié par 2 et décrémenté, et chaque ligne doit avoir (de chaque côté) un nombre de points égal à sa position dans le programme (la ligne du bas est la ligne 0, celui au-dessus est la ligne 1 et ainsi de suite). Il n'y a que quelques commandes, et tout caractère autre que ceux répertoriés sur la page 'Wiki / Commandes' est traité comme un no-op (les points étrangers n'affectent en rien le programme, tant que la forme globale du programme reste rectangulaire).
Notez que pour les commandes à deux arguments, j'ai utilisé un et b tout au long de l'explication. Gardant cela à l'esprit, voyons ce que fait le programme réel, après avoir supprimé tous les caractères étrangers qui composent le remplissage:
Une solution alternative, et plus courte si le rembourrage n'est pas nécessaire:
Essayez-le en ligne!
la source
PowerShell 3.0, 45 octets
L'appel mathématique fait mal et l'arrondi du banquier de PS est le diable réel (d'où la nécessité de regex pour tronquer pour enregistrer un octet), mais cela semble assez bien.
la source
Java (JDK) , 28 octets
Essayez-le en ligne!
Parce que l'exemple n'était vraiment pas bien joué: p
Crédits
la source
Gelée , 7 octets
Fonctionne approximativement en temps O (2 n ) .
Essayez-le en ligne!
Comment ça fonctionne
la source
JavaScript (ES7),
2219 octets-3 octets grâce à ETHproductions.
Essayez-le
Explication
Multipliez l'entrée par 8 et ajoutez 1, augmentez cela à la puissance de 0,5, en nous donnant la racine carrée, soustrayez 1 et décalez le résultat de 1 à droite.
la source
n=>(8*n+1)**.5-1>>1
économiser 3 octets? (non testé)Python 2/3, 32 octets
Implémentation Python de la formule sous forme fermée
La division entière est
//2
arrondie vers zéro, donc pasfloor( )
nécessairela source
from math import sqrt
fonctionner? Si tel est le cas, il doit être inclus dans le bytecount. (Dans ce cas,lambda n:int((math.sqrt(1+8*n)-1)//2) import math
c'est un peu plus court. )Haskell , 28 octets
Un peu ennuyeux, mais il
est assez court que l 'autre solution Haskell eta une très belle expression sans point. Malheureusement, je ne pouvais pas le raccourcir sans que le système de type ne gêne:Essayez-le en ligne!
Sans point, 33 octets
Alternativement, 33 octets
Même longueur que la version sans point, mais beaucoup plus intéressante.
la source
Voie lactée , 12 octets
Explication
la source
Pyt ,
75 octetsExplication:
Plus rapide, mais plus long
Pyt ,
119 octetsExplication:
Voie alternative - port de la réponse Shaggy
Pyt ,
87 octetsla source
J , 11 octets
Essayez-le en ligne!
la source
*
pour produire 1Espace blanc , 111 octets
Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté à titre d'explication uniquement.Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Explication en pseudo-code:
Utilise la formule:
REMARQUE: les espaces blancs n'ont pas de racine carrée intégrée, nous devons donc le faire manuellement.
la source
Vitsy , 16 octets
Essayez-le en ligne!
Autant ajouter ma propre contribution au mix. C'est plus court que la solution d'itérations de partition dans Vitsy.
la source
Oasis , 14 octets
Essayez-le en ligne!
Comment?
Il s'agit d'une solution récursive qui incrémente le résultat lorsqu'il rencontre un index triangulaire, en commençant par 0 pour l'entrée 0.
la source
Perl 5
-p
, 19 (++) octetsEssayez-le en ligne!
la source
Rubis , 27 octets
Trois pour le prix d'un. Je suis déçu de ne pas pouvoir aller plus court.
Essayez-le en ligne! (pour sélectionner la fonction, ajoutez f = devant)
la source