19 Nov 2014

Coding Dojo @ Agile Tour Lille 2014

Mardi 18 novembre se déroulait l’Agile Tour Lille 2014. Nous avons présenté la démarche que nous avons mis en place au WebCenter et, comme rien ne remplace l’expérience, animer une session de coding dojo.

Pour cette session, nous avons choisi de le sujet GameOfLife

Le but est d’écrire une programme capable de calculer la prochaine itération du jeu de la vie, peu importe la situation de départ.
On démarrera avec un tableau de cellule a deux dimensions, où chaque cellule est soit vivante soit morte. La grille est finie et aucune vie n’existe hors des bords.

Voici les 4 règles à suivre lors du calcul de l’itération suivante :

  • Une cellule vivante avec moins de deux voisines vivantes meurt (sous-population)
  • Une cellule vivante avec plus de trois voisines vivantes meurt (sur-population)
  • Une cellule vivante avec deux ou trois voisines vivantes reste vivante sur la prochaine génération
  • Une cellule morte avec exactement trois voisines vivantes devient une cellule vivante

PANO_20141118_153400

Technologies :

  • 1 groupe C++
  • 1 groupe java
  • 1 groupe Haskell
  • 1 groupe Python
  • 2 groupes C#
  • 1 groupe Smalltalk

Points Marquants

On a beaucoup discuté autour de la structure de données qui héberge la grille de cellule.
Les implémentations variaient beaucoup d’un groupe à l’autre mais on peut les regrouper en 3 grandes catégories :

  • Une chaine de caractères ou une liste de chaine de caractères, chaque caractère représentant une cellule.
  • Une liste de liste de cellules ou une tableau de tableau de cellules, objet ne disposant que d’une propriété ‘état’.
  • Une Liste de cellules disposant de ces coordonnées et de son état.

WP_20141118_15_34_35_Pro
Toutes ces structures ont des avantages et des inconvénients, nous avons mis l’accent sur la technique pour trouver la structure la plus adaptée. Nous avons échangé sur le fait que choisir sa structure de données au départ alors que c’est le moment ou l’on connait le moins le problème est probablement contre productif. La solution retenue est de commencer avec une structure de données ultra-simple, et de découvrir le problème, en accumulant de la connaissance lorsque nous tentions de résoudre chacun des cas précis de vie ou mort des cellules. Une fois le problème compris et résolut on peut s’essayer à faire migrer cette structure de données pour découvrir si la nouvelle structure est plus performante que la précédente. Par performant ici on entends un mélange de code propre et lisible, ainsi que de facilité d’utilisation et bien sur de performance brute.

Share