dimanche 12 juin 2011

Code of duty

Cela faisait longtemps que je n'avais plus écrit ici...

Ce billet est consacré à un évènement en cours au moment ou j'écrit: code of duty (http://codeofduty.criteo.com/)

Petit récapitulatif: c'est un concours de programmation ou il y a des lots à gagner (assez intéressants: iPad2, 10.000€!!).

Alors que j'essayais de produire une solution, j'ai été confronté à un problème de compréhension relative à la phrase suivante: "l’élément ni ne peut « transférer » qu’une unité à un seul de ses voisins". Je comprends cette phrase comme: "Un élément A ne peut se voir décrémenter que d'une seule unité par itération". Mais quid de l'incrémentation? Est-ce possible d'incrémenter deux fois un élément? Prenons par exemple la configuration (3 0 3). S'il on peut incrémenter plus d'une fois par itération, alors une seule itération suffit. Sinon, deux itérations sont nécessaires.

Du coup, j'ai râlé tout seul dans mon coin et j'ai passé en revue l'énoncé et différentes questions me sont venues à l'esprit:
* Dans un de leurs point de la FAQ, ils parlent de deux points en moins toutes les deux heures. Je suppose que cette règle est présente pour favoriser ceux qui ont été réactifs. Mais les plus réactifs sont déjà favorisé par la règle "A réponse identique entre deux ou plusieurs participants, c’est la première reçue qui aura l’avantage." Identique c-a-d, algorithme identique? Ou cotation identique?
* Pourquoi ne pas avoir choisi de publier toutes les soumissions? Cela aurait été très
instructif.
* Le matériel utilisé n'a pas été très défini. Je ne demande pas savoir la quantité de cache L2 des processeurs, mais il a été dit que les machines pouvaient être single ou dual core. Or, il me semble que cela fait une très grande différence si l'on veut utiliser le multi-thread.
* Lors des soumissions, il est demandé de n'envoyer qu'un seul fichier. Je comprends l'aspect pratique pour ceux qui vont recevoir toutes les soumissions. Mais le java pousse les utilisateurs à avoir qu'une classe par fichier tandis que pour le C et C++, tout le monde a tendance à séparer les définitions des implémentations. Du coup, je trouve ce choix curieux.
* Une seule soumission est permise. Je trouve cela dommage et presque en contradiction avec la règle favorisant les personnes réactives. La première idée n'est pas toujours la bonne. Donc, si je veux attendre d'avoir une nouvelle idée pour les comparer, je suis obligé d'attendre et donc, perdre des points.
* Pourquoi ne pas pouvoir poser de questions pendant le concours? A partir du moment ou toutes les questions/réponses seraient accessibles à tous, il n'y aurait pas d'avantage donné à celui qui pose la question.


Après avoir lu ces différentes réflexions, vous pourriez penser que tout est noir, mais je tiens à relativiser. Ce sont des points que j'aimerai voir amélioré lors de la prochaine édition et j'espère réellement qu'une prochaine édition aura lieu. Car je tient à féliciter les organisateurs de ce concours car cela demande un réel travail de leur part. Et je tiens également à prendre mes responsabilités: je n'ai pas pris le temps de lire toute la documentation avant le début du concours auquel cas j'aurai pu poser certaines de ces questions et j'y aurai eu des réponses.


Sinon, note personnelle: utiliser ce blog lorsque je veux faire part d'une réflexion, twitter c'est juste bon pour publier des faits et c'est vraiment pas pratique pour avoir une discussion avec quelqu'un...