Skip to content

fayssalElAnsari/simulation-feu-de-foret

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ENONCE

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.

Grid properties

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

Grid architecture

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

Grid initialisation

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;

fire simulation

This is the fundamental step of the fire simulation we'll need to

REST API:

Request:

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)
}

Response:

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 ***

  1. read config from txt file
  2. create /simulate_fire route
  3. implement the fire sim algo
  4. simple front end (optional)

About

ciril groupe test

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages