Pour commencer l’année, ce week-end de l’épiphanie ont eu lieu les qualifications de Facebook Hacker Cup.
Progress Pie
Il fallait dire, pour un certain pourcentage d’un camembert de progression, si un certain pixel devait être noir ou blanc.
Astuce. Comme c’est pénible de faire le passage de clockwise à counter-clockwise au niveau du calcul de l’angle, autant inverser X et Y pour s’intéresser à la symétrie de la figure par rapport à $y = x$ et ainsi directement avoir la correspondance pourcentage et angle !
La fonction atan2(dy, dx) renvoie la valeur de l’angle (arctan) pour des mesures algébriques dy, dx (i.e., des différences de coordonnées).
Pitfall. Je me suis fait avoir par la ligne suivante de l’énoncé :
When the progress percentage, P, is greater than 0%, a sector of angle (P% * 360) degrees is colored black
Il faut en effet faire un cas particulier lorsque $P = 0$ puisque rien n’est censé être dessiné, pas même une seule ligne noire. D’où le if P > 0 and dans le code.
Lazy Loading
Un glouton suffit.
Fighting the Zombie
Quelle est la probabilité que la somme de $k$ dés à $f$ faces comprises entre $a$ et $a + f - 1$ soit supérieure ou égale à un certain $h$ ?
Au départ j’ai cru que je pourrais tricher avec la bibliothèque Python lea de distributions de probabilités discrètes faite par Pierre Denis.
Ce Pf(draw >= H) est en outre scandaleusement sucré syntaxiquement :D
Mais y a beaucoup d’outcomes possibles lorsqu’on somme 20 dés 6. Donc plutôt que de calculer les convolutions successives (avec numpy.convolve par exemple) il vaut mieux passer par les fonctions génératrices, comme exprimé dans ce post Mathematics Stack Exchange ou ce post de blog d’un consultant en statistiques qui a 4 enfants :
Notez la regexp scandaleuse pour parser les XdY±Z.