Écrivez un programme qui accepte une entrée telle que:
n,k
qui calcule ensuite:
puis imprime le résultat.
Un exemple numérique:
Contribution:
5,2
Calcul interne:
Sortie imprimée:
10
Je voudrais voir une réponse qui bat ma solution python de 65 caractères, mais toutes les langues sont évidemment les bienvenues.
Voici ma solution:
n,k=input();f=lambda x:+(x<2)or x*f(x-1);print f(n)/(f(k)*f(n-k))
Éditer:
J'admets que cette question provient du puzzle de combinaison mathématique du site Web de codegolf . Je sais que ma réponse peut sembler que peu de progrès peuvent être réalisés, mais les dirigeants de ce puzzle l'ont résolu en près de la moitié du nombre de personnages.
Le nombre de caractères actuellement le plus bas par langue est:
Perl: 35
Rubis: 36
Python: 39
PHP: 62
code-golf
combinatorics
backus
la source
la source
Réponses:
APL, 3 octets
Ou pour ceux dont le navigateur ne rend pas ce qui précède, dans un rendu ASCII:
la source
n,k
entrée, vous devez le faire!/⌽⎕
.R (11 caractères)
la source
C 96
Avec E / S (qui prend environ 34 caractères). Ajout de quelques nouvelles lignes pour le rendre lisible.
Maintenant, si vous m'excusez, j'ai une fusée ASCII et choisissez k pour attraper.
la source
GolfScript, 17 caractères
Cette solution gère correctement les cas tels que k = 0 ou k = 1.
La partie de type factoriel est basée sur une réponse précédente .
la source
GolfScript 21
Pas particulièrement court, GolfScript n'a pas de véritable fonction factorielle, mais cela doit être la manipulation de données la plus méchante que j'aie jamais faite, cela nécessite une trace de pile:
"5,2" Données sur la pile depuis l'entrée.
~
La commande Eval, notez que, est un opérateur qui transforme un nombre en un tableau.[0 1 2 3 4] 2
~
Non binaire.[0 1 2 3 4] -3
)
Incrément.[0 1 2 3 4] -2
>
Prendre la fin du tableau, -2 comme paramètre pour obtenir les 2 derniers éléments.[3 4]
.
Élément en double.[3 4] [3 4]
,
Longueur du tableau.[3 4] 2
,
Transformez le numéro en tableau.[3 4] [0 1]
]
Créer un tableau.[[3 4] [0 1]]
{{)}%{*}*}
Bloc de code.[[3 4] [0 1]] {{)}% {*} *}
%
Exécute le bloc une fois pour chaque élément du tableau. La partie suivante ne montre que la première boucle.[3 4]
{)}%
Incrémentez chaque élément du tableau.[4 5]
{*}
Bloc contenant une commande multiplier.[4 5] {*}
*
"Pliez" le tableau à l'aide de la commande block, c'est-à-dire faites dans ce cas le produit de tous les éléments.20 Une
fois la grande boucle terminée, elle renvoie un tableau avec les résultats.
[20 2]
~
Déconstruisez le tableau.20 2
/
Division.dix
la source
Ruby 1.9,
5246 (42) caractèresSi stderr est ignoré:
Ruby 1.8, 43 caractères, pas de sortie supplémentaire vers stderr:
Modifications:
la source
Python (56)
Code non golfé et explication d'un raccourci pour calculer le coefficient binomial. (Remarque: Il y a des informations que je n'ai tout simplement pas découvert afin de passer à la version 39 caractères; je ne pense pas que cette approche vous y amènera.)
la source
*
pour analyser les entrées du formulaire4545 78
?*
le problème.4545 78
n'est pas une expression Python valide, doncinput()
lèvera unSyntaxError
. Cette astuce dépend entièrement du problème poséx,y
. Si vous aviez une fonction qui lisaitx y
et renvoyait un tuple, alors vous pourriez l'utiliser*
avec ça très bien.RPL (4)
(en utilisant la fonction intégrée)
la source
Windows PowerShell, 57
la source
J,
333635 caractères sont entrés, analysés et sortis. L'autre caractère
!
,, est n choisissez k.Je n'ai pas Windows pour tester cela pour le moment, mais je pense que cela devrait fonctionner là-bas.
la source
Q, 32 caractères
la source
Perl 6 (55)
la source
RPL (22)
(sans utiliser la fonction COMB intégrée)
la source
Q (
5045)Vous pouvez raser quelques caractères de ce qui précède en supprimant les crochets redondants et en utilisant 1 * / au lieu de prd.
la source
Mathematica 12
Fonction simple et intégrée.
la source
Perl 6 ,
2516 octets-9 octets grâce à nwellnhof
Essayez-le en ligne!
Fonction anonyme qui prend deux nombres et retourne un int. Cela utilise la fonction intégrée
combinations
et convertit la liste renvoyée en int.la source
combinations
pouvais prendre un nombre au lieu d'une listePHP (71
79)la source
Python (54)
Essentiellement le même que celui de Python ci-dessus, mais je rase quatre octets en laissant tomber le
à partir de la définition de la fonction. Cependant, cela entraîne la fonction renvoyant True au lieu de 1 si k = 0, mais cela peut être corrigé en multipliant par 1 avant l'impression, car 1 * True = 1, ajoutant ainsi deux octets.
la source
J, 11 caractères
Prend l'entrée du clavier.
la source
Haskell (80)
Mais, si l'entrée dans le format
x y
est autorisée au lieu de dans le formatx,y
, c'est 74 caractères:la source
Scala 54
la source
Python (52)
L' amélioration des deux autres en utilisant
print+
pour convertir le résultat def
partirboolean
pourint
en cask==0
.Je ne sais toujours pas comment le réduire à 39, je me demande s'ils utilisent lambda du tout.
la source
(L'OP n'a spécifié que de manière lâche la méthode / le format d'entrée et de sortie, donc ce qui suit semble acceptable.)
Cahier Sage (
39 4140)Dans la cellule actuelle,
où l'entrée dans le formulaire
n,k
est entrée et évaluée dans la cellule précédente. Cela simule "l'entrée de ligne de commande" en l'affectant à_
(similaire aux arguments de ligne de commande).Cahier Sage (
42 4443)Alternativement, en utilisant "l'entrée dans la source" (avec seulement les caractères
x=
et la nouvelle ligne s'ajoutant au score), par exemple,Ces deux approches sont évidemment des retombées de réponses antérieures d'autres auteurs.
la source
Tcl , 80 octets
Essayez-le en ligne!
la source
Javascript, 27 octets
D'abord mes propres solutions de 35 octets:
Ou bien,
Le premier fonctionne récursivement, avec la
(n,k) = (n-1,k) + (n-1,k-1)
règle simple . Le second utilise ça(n,k) = (n-1,k-1) * n/k
.ÉDITER
Je viens de remarquer la solution d'Arnould en double:
Ce qui représente un énorme 8 octets de moins (27 octets)
la source
TI-BASIC, 16 caractères (8 octets)
L'entrée est une liste de 2 pouces de longueur
Ans
.La sortie est le résultat de la formule définie ici .
Si la solution ci-dessus ne suffit pas, la solution suivante de 35 caractères (24 octets) fonctionne également:
Remarque: TI-BASIC est un langage à jetons. Le nombre de caractères n'est pas égal au nombre d'octets.
la source