Vous êtes sur la page 1sur 8

Projet Piscine C

Grimly
42 sta staff@42.fr

Rsum: Trouveras-tu la sortie ?

Table des matires


I II III IV V Prambule Sujet Consignes Notation Annexe 2 3 5 6 7

Chapitre I Prambule
Voici ce que le Guide a dire propos du voyage dans lespace : The Innite Improbability Drive is a new method of crossing vast interstellar distances without all that tedious mucking about in hyperspace. As soon as the drive reaches Innite Improbability, it passes through every conceivable point in every conceivable Universe almost simultaneously, then selects the appropriate re-entry point. The principle of generating small amounts of nite improbability by hooking the logic circuits of a Bambleweeny 57 Sub-Meson Brain to an atomic vector plotter suspended in a strong Brownian Motion producer, say a nice hot cup of tea, were of course well understood. Such generators were often used to break the ice at parties by making all the molecules in the hostesss undergarments leap simultaneously one foot to the left, in accordance with the Theory of Indeterminacy. Many respectable physicists said they werent going to stand for that sort of thing partly because it was a debasement of science, but mostly because they didnt get invited to those sort of parties.

Chapitre II Sujet
Promenade dans un labyrinthe : Il sagit de trouver le plus court chemin entre lentre et la sortie dans un labyrinthe en vitant des obstacles. Un labyrinthe vous est transmis dans un chier pass en argument du programme. La premire ligne du labyrinthe contient les informations pour lire la carte : Le nombre de lignes du labyrinthe puis le nombre de colonne (LINExCOL) ; Le caractre "plein" ; Le caractre "vide" ; Le caractre "chemin" ; Le caractre "entre du labyrinthe" ; Le caractre "sortie du labyrinthe". Le labyrinthe est compos de lignes de caractres "vide", de caractres "plein", de caractres "entre du labyrinthe" et de caractres "sortie du labyrinthe". Le but du programme est de remplacer les caractres "vide" par des caractres "chemin" pour reprsenter le plus court chemin pour traverser le labyrinthe. Un deplacement ne peut se faire que horizontalement ou verticalement : pas en diagonale. Dans le cas o plusieurs solutions existent, on choisira de reprsenter la plus courte. En cas dgalit, ce sera celle dont la sortie ou la solution est la plus en haut puis la plus a gauche.

Projet Piscine C Dnition dune carte valide :

Grimly

Toutes les lignes doivent respecter les tailles donnes lors de la premire ligne (LINExCOL). Il ne peut y avoir quune entre. Il doit y avoir au moins une sortie. Il doit y avoir une solution au minimum. Le labyrinthe ne fera pas plus que un milliard de case. la n de chaque ligne, il y a un retour la ligne. Les caractres prsents dans la carte doivent tre uniquement ceux prsent la premire ligne. En cas de carte invalide, vous acherez sur la sortie derreur : MAP ERROR suivi dun retour la ligne. Le programme passera ensuite au traitement du labyrinthe suivant. Exemples :
$>cat -e 01.map 10x10* o12$ *****2****$ * * ****$ * **** *$ * **** *$ * * 2$ * ** * *$ * * **$ *** ** *$ 1 ****$ **********$ $>

$>./grimly 01.map 10x10* o12 *****2**** * * **** * **** * * **** * * * oooo2 * **o* * * ooo* ** ***o ** * 1ooo **** ********** => RESULTAT EN 12 COUPS ! $>

$>./grimly bug.map MAP ERROR $>

Chapitre III Consignes


Lexcutable doit sappeller grimly et se trouver dans le rpertoire principal. Votre projet doit tre la Norme. Vous ne pouvez utiliser que les lments vus durant votre Piscine. Le rpertoire doit avoir un chier auteur dans lequel vous devez mettre vos logins :
$>cat auteur login_1:login_2 $>

Le programme peut prendre plusieurs chiers en paramtre. Si aucun argument nest pass, le programme lira un labyrinthe depuis lentre standard. Votre Makele devra compiler le projet. Vous ne pouvez utiliser que les fonctions open, close, write, read, malloc et free. Vous pouvez poser vos questions sur le forum.

Chapitre IV Notation
La notation du Grimly seectue en deux temps : Nous commenons par tester las funcionalidades (sur 10 points). Votre programme doit fonctionner. La deuxime partie est la optimizacin du code. Elle est note sur deux parties indpendantes : la vitesse dxecution (5 points) et la mmoire utilis (5 points). Elle nest vrie que si toute la premire partie est correcte. Tous les Grimly ayant valid lintgralit de la premire partie seront en comptition sur les deux tests doptimisation. Le meilleur projet remportera lintgralit des points de cette partie. Les projets suivants remporteront des points en fonction de leur classement : pour la vitesse dxecution, les plus rapides auront plus de points que les plus lents. Pour la mmoire, ceux qui ont utilis le moins de mmoire auront plus de points que ceux qui en utilisent plus. Bon courage tous !

Chapitre V Annexe
Exemple de gnrateur.
#!/usr/bin/env ruby ### Made By Sgregory :-) if ARGV.count < 3 || ARGV[2].length < 5 puts "./usage height width characters" else height, width, chars, gates = ARGV[0].to_i, ARGV[1].to_i, ARGV[2], ARGV[3].to_i entry = rand(width - 4) + 2 entry2 = rand(width - 4) + 2 puts("#{height}x#{width}#{ARGV[2]}") height.times do |y| width.times do |x| if y == 0 && x == entry print chars[3].chr elsif y == height - 1 && x == entry2 print chars[4].chr elsif y.between?(1, height - 2) && x.between?(1, width - 2) && rand(100) > 20 print chars[1].chr else print chars[0].chr end end print "\n" end end