Nous avons 40 bâtons de mêmes largeurs mais de hauteurs différentes. Combien d'arrangements est-il possible de les mettre les uns à côté des autres pour que lorsque nous regardons de droite nous voyons 10 bâtons et quand nous regardons de gauche nous voyons à nouveau exactement 10 bâtons?
Par exemple, une telle commande est:
Les bâtons noirs sont cachés, les bâtons rouges sont ceux que vous pouvez voir lorsque vous regardez de gauche, les bâtons bleus sont ceux que vous pouvez voir lorsque vous regardez de droite et le violet (c'est-à-dire le plus long) est celui que vous pouvez voir vu des deux côtés.
Comme cas de test:
- Si nous avions 3 bâtons, le nombre de commandes pour voir 2 de gauche et 2 de droite est 2
- Si nous avions 5 bâtons, le nombre de commandes pour voir 3 de gauche et 3 de droite est 6
- Si nous avions 10 bâtons, le nombre de commandes pour voir 4 de gauche et 4 de droite est 90720
10!/40 = 90720
... est-ce une coïncidence?Réponses:
PARI / GP, 80
Le nombre de bâtons visibles est également appelé numéros de gratte-ciel , après le jeu crayon / grille. Ce code est basé sur (seulement légèrement modifié) la formule de OEIS A218531 . Je ne connais pas beaucoup PARI, mais je ne pense vraiment pas qu'il y ait beaucoup à jouer au golf ici.
Les cas de test sont tous présentés sur ideone.com . Le résultat pour
f(40,10)
est:la source
v
des bâtons visibles à gauche est le nombre de Stirlings(n,v)
. Si le bâton le plus haut est en positionk
, alors les bâtons visibles à gauche sont ce bâton et les bâtons visibles à gauche dans la sous-permutation à gauche desk-1
valeurs à gauche de la positionk
. Donc, pour avoirv
des bâtons visibles à gauche et des bâtons visibles àv
droite, on a les(k,v-1)
choix de permuter la moitié gauche,s(n-k-1,v-1)
de permuter la moitié droite etbinomial(n-1,k)
de diviser les bâtons en deux moitiés.f(n,v,s=stirling)=abs(sum(k=1,n--,binomial(n,k)*s(k,v-1)*s(n-k,v-1)))
. Cela enregistresterling
dans une variable pour la réutilisation, laisse son dernier argument, car 1 est la valeur par défaut, et soustrait 1 de n une fois plutôt que trois fois.Python 3, 259 octets
Pas très content de ça.
Exemple d'entrée et de sortie:
Il génère toutes les combinaisons possibles de la plage fournie, puis les parcourt en boucle, vérifiant chaque nombre en eux pour voir s'il est égal au maximum des nombres précédents. Il fait ensuite la même chose en arrière, et si le compte en avant (t) = le compte en arrière (d) = le numéro de vue donné (k), il est valide. Il ajoute cela à un compteur (c) et l'imprime à la fin.
la source
R, 104
De-golf un peu:
la source
Pyth -
3836 octetsFondamentalement, un port de la réponse R. Assez lent, je ne peux même pas terminer en
10, 4
ligne.Les seules choses que Pyth n'a pas sont cummax et les
==
vecteurs over, mais ceux-ci n'ont mis que quelques octets à implémenter.Explication et golf à venir bientôt.
Essayez-le ici en ligne .
la source