Vous pouvez y passer 2h au maximum, et le développement devra être fait en Java. Une fois terminé, vous pourrez m'envoyer vos travaux par retour de mail (zip ou lien github, ou autre) Je vous proposerai par la suite un entretien pour débriefer de ce test. Si vous avez la moindre question n'hésitez pas à m'en faire part par retour de mail.
Voici l'énoncé de l'exercice :
L'objectif est d'implémenter un algorithme simple de simulation de la propagation d’un feu de forêt. La forêt est représentée par une grille de dimension h x l. La dimension temporelle est discrétisée. Le déroulement de la simulation se fait donc étape par étape. Dans l’état initial, une ou plusieurs cases sont en feu. Si une case est en feu à l’étape t, alors à l’étape t+1 : · Le feu s'éteint dans cette case (la case est remplie de cendre et ne peut ensuite plus brûler) · et il y a une probabilité p que le feu se propage à chacune des 4 cases adjacentes
La simulation s’arrête lorsqu'il n’y a plus aucune case en feu.
Les dimensions de la grille, la position des cases initialement en feu, ainsi que la probabilité de propagation, sont des paramètres du programme stockés dans un fichier de configuration (format libre).
Au minimum, un exécutable en ligne de commande ou une API, sans affichage de la grille, est suffisant. Dans ce cas la commande ou l’appel REST, retourne le nombre de cases réduites en cendre à la fin de la simulation, et le nombre d’étapes écoulées. L’UI, le dessin de la grille, son animation, ne sont pas requis. Ils sont optionnels, mais bienvenus. Le packaging, l’implémentation de tests, ou tout autre élément d’industrialisation que le candidat souhaitera intégrer sont des plus.
Il est important que vous apportiez du soin à la conception et au design du code. Le but est en effet de disposer de code récent de votre part afin de provoquer des discussions techniques.
In the spec we'll need to have a custom grid properties file, we can simply craete a java class with hardcoded values or we can use a .properties file with the Properties java class.
for example we can do:
h=10
l=10
x=4
y=4
p=0.95
We can create a cell class and create a 2D array of Cell where each cell has an Enum of the state (on fire, burned, forest), or we can simply definea 2d Array of type int and consider the default value which is 0 the most common state at the creation of the grid which is the forest state.
0 : forest
1 : on fire
2 : aches
Since we'll have a preinitialised as forest grid all we'll have to do is to set the fire cell simply we do:
grid[x][y] = 1;
This is the fundamental step of the fire simulation we'll need to
sending parameters in the request is not really needed, since the properties of the grid are already defined in a config file, so we can for example just create a /startSimulation route which would generate the requested results, or we could add a the possibility of override the predefined properties. The request should contain the following:
{
config params... (optional)
}
The only required info of the grid is the number of burned cells and the number of steps, but in case we would like to visualize the evolution of the simulation step by step or recover a certain step by its index we'll need to have that information stored somewhere, a list with all the steps would be a good fit in this case. The response should contain the following:
{
steps: [ [grid at step 0], [grid at step 1] ] (optional),
burned_cells: ,
nb_steps: (eq to len(steps))
}
*** tasks ***
- read config from txt file
- create /simulate_fire route
- implement the fire sim algo
- simple front end (optional)