Vous êtes sur la page 1sur 13

Sujet de lexamen 00

Version 1.0
Bocal bocal@42.fr

Rsum: Ce document est le sujet du premier examen du module algo-1-001. Cet examen sera pour vous et pour nous loccasion de faire un point sur votre avancement.

Table des matires


I I.1 I.2 II II.1 II.2 II.3 II.4 II.5 II.6 II.7 Dtails administratifs Consignes gnrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exercices Exercice Exercice Exercice Exercice Exercice Exercice Exercice 2 2 3 5 5 6 7 8 9 10 12

00 01 02 03 04 05 06

rotone . . . . hidenp . . . . union . . . . ord_alphlong g_diam . . . count_island Time Lord .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

Chapitre I Dtails administratifs


I.1 Consignes gnrales

Aucune forme de communication nest permise. Ceci est un examen, il est interdit de discuter, couter de la musique, faire du bruit ou produire toute autre nuisance pouvant dranger les autres tudiants ou perturber le bon droulement de lexamen. Vos tlphones portables et autres appareils technologiques doivent tre teints et rangs hors datteinte. Si un tlphone sonne, toute la range concerne est limine et doit sortir immdiatement. Votre home contient deux dossiers : "rendu" et "sujet". Le rpertoire "sujet" contient le sujet de lexamen. Vous avez du le trouver puisque vous lisez ce document. Le rpertoire "rendu" est un clone de votre dpot de rendu ddi cet examen. Vous y ferez vos commits et vos pushs. Seul le contenu que vous avez push sur votre dpot de rendu sera corrig. Vous ne pouvez excuter les programmes que vous avez compils vous-mme que dans votre dossier "rendu" et ses sous-dossiers. Cela est interdit ailleurs. Chaque exercice doit tre ralis dans le repertoire correspondant au nom indiqu dans len-tte de chaque exercice. Vous devez rendre, la racine du repertoire "rendu", un chier nomm "auteur" comprenant votre login suivi dun retour la ligne. Si ce chier est absent ou mal format, vous ne serez pas corrig. Par exemple :
$> cat -e ~/rendu/auteur xlogin$ $>

Certaines notions ncssaires la ralisation de certains exercices sont dcouvrir dans les mans. Cest un programme qui soccupe du ramassage, respectez les noms, les chemins, 2

Sujet de lexamen 00 les chiers et les rpertoires. . .

Version 1.0

Lorsquun exercice impose un nom de chier, seul ce chier sera ramass. Sinon lexercice stipule *.c, *.h et tous vos chiers .c et .h seront ramasss, et ces chiers l seulement. En cas de problme technique avec le sujet, on ne doit sadresser quau surveillant uniquement. Interdiction de parler ses voisins. En cas de question, on ne doit sadresser quau surveillant uniquement. Interdiction de parler ses voisins. Tout matriel non explicitement autoris est implicitement interdit. La correction sarrtera au premier exercice faux. Toute sortie de la salle est dnitive. Un surveillant peut vous expulser de la salle sil le juge ncssaire.

I.2

Le Code

Des fonctions utiles ou des chiers supplmentaires sont parfois donns dans un sous repertoires de ~/sujet/. Si ce dossier nexiste pas ou bien sil est vide, cest que nous ne vous fournissons rien. Ce dossier sera gnralement nomm misc, mais cel peut varier dun examen lautre. La correction du code est automatise. Un programme testera le bon fonctionnement des exercices : la "Moulinette". Lorsquun exercice vous demande dcrire un programme avec un ou plusieurs chiers nomms, votre programme sera compil avec la commande gcc -Wall -Wextra -Werror ficher1.c fichier2.c fichiern.c -o nom_programme. Lorsquun exercice vous demande dcrire un programme et laisse les noms et le nombre de chiers votre discrtion, votre programme sera compil avec la commande : gcc -Wall -Wextra -Werror *.c -o nom_programme. Enn, lorquun exercice vous demande de rendre une fonction (et donc un seul chier nomm), votre chier sera compil avec la commande gcc -c -Wall -Wextra -Werror votrefichier.c, puis nous compilerons notre main et linkerons lxcutable. Les fonctions autorises sont indiques dans len-tte de chaque exercice. Vous pouvez recoder toutes les fonctions qui vous semblent utiles votre guise. Utiliser une fonction qui nest pas autorise est de la triche sanctionne par un -42. Toute fonction non autorise explicitement est implicitement interdite. Vous avez le droit des feuilles blanches et un stylo. Pas de cahier de notes, de pense-bte ou autres cours. Vous tes seuls face votre examen.

Sujet de lexamen 00

Version 1.0

Pour toute question aprs lexamen, crez un ticket sur le dashboard (dashboard.42.fr).

Chapitre II Exercices
II.1 Exercice 00 - rotone
Exercice : 00 rotone Dossier de rendu : ex00/ Fichiers rendre : rotone.c Fonctions Autorises : write Remarques : n/a

crire un programme nomm "rotone" qui prend en paramtre une chane de caractres et qui ache cette chane en remplaant chaque caractre alphabtique par le caractre suivant dans lordre alphabtique. z devient a et Z devient A. Les majuscules restent des majuscules et les minuscules restent des minuscules. Lachage se termine toujours par un retour la ligne. Si le nombre de paramtres transmis est dirent de 1, le programme ache \n. Exemple :
$>./rotone "abc" bcd $>./rotone "Les stagiaires du staff ne sentent pas toujours tres bon." | cat -e Mft tubhjbjsft ev tubgg of tfoufou qbt upvkpvst usft cpo.$ $>./rotone "AkjhZ zLKIJz , 23y " | cat -e BlkiA aMLJKa , 23z $ $>./rotone | cat -e $ $> $>./rotone "" | cat -e $ $>

Sujet de lexamen 00

Version 1.0

II.2

Exercice 01 - hidenp
Exercice : 01 hidenp

Dossier de rendu : ex01/ Fichiers rendre : hidenp.c Fonctions Autorises : write Remarques : n/a

crire un programme nomm "hidenp" qui prend en paramtres deux chanes de caractres et qui ache 1 suivi de \n si la chane du premier paramtre est cache dans la deuxime chane. Sinon il ache 0 suivi de \n. Soit s1 et s2 des chanes de caractres. On dit que la chane s1 est cache dans la chane s2 si on peut trouver chaque caractre de s1 dans s2 et ce dans le mme ordre que dans s1. Si le nombre de paramtres transmis est dirent de 2, le programme ache \n. Exemples :
$>./hidenp 1$ $>./hidenp 1$ $>./hidenp 0$ $>./hidenp $ $> "fgex.;" "tyf34gdgf; ektufjhgdgex.;.;rtjynur6" | cat -e "abc" "2altrb53c.sse" | cat -e "abc" "btarc" | cat -e | cat -e

Sujet de lexamen 00

Version 1.0

II.3

Exercice 02 - union
Exercice : 02 union

Dossier de rendu : ex02/ Fichiers rendre : union.c Fonctions Autorises : write Remarques : n/a

crire un programme qui prend en paramtre deux chanes de caractres et qui ache sans doublon les caractres qui apparaissent dans lune ou dans lautre. Lachage se fera dans lordre dapparition dans la ligne de commande. Lachage doit etre suivi dun retour la ligne. Si le nombre de paramtres transmis est dirent de 2, le programme ache \n. Exemple :
$>./union zpadinton "paqefwtdjetyiytjneytjoeyjnejeyj" | cat -e zpadintoqefwjy$ $>./union ddf6vewg64f gtwthgdwthdwfteewhrtag6h4ffdhsd | cat -e df6vewg4thras$ $>./union "rien" "cette phrase ne cache rien" | cat -e rienct phas$ $>./union | cat -e $ $> $>./union "rien" | cat -e $ $>

Sujet de lexamen 00

Version 1.0

II.4

Exercice 03 - ord_alphlong
Exercice : 03 ord_alphlong

Dossier de rendu : ex03/ Fichiers rendre : *.c, *.h Fonctions Autorises : write, malloc, free Remarques : n/a

crire un programme qui prend en paramtre une chaine de caractres et qui ache les mots de cette chaine par ordre de longueur puis dans lordre ascii. Les majuscules et minuscules sont identiques dans lordre alphabetique (bien regarder les exemples). En cas dgalit alphabetique (ex aA et Aa) les mots doivent rester dans lordre ou ils etaient dans la chaine dorigine (second exemple). En cas de doublons, les doublons sont conserves (dernier exemple). Si le nombre de paramtres transmis est dirent de 1, le programme ache \n. Dans les chaines, il ny aura que des espaces, des tabulations et des caractres alphanumeriques. Vous nacherez quun espace entre les mots. Aucun avant le premier ni aprs le dernier de chaque ligne. Exemples :
$>./ord_alphlong $ $>./ord_alphlong "De son baton il frappa la pierre et l eau jaillit" | cat -e l$ De et il la$ eau son$ baton$ frappa pierre$ jaillit$ $>./ord_alphlong "A a b B cc ca cd" | cat -e A a b B$ ca cc cd$ $>./ord_alphlong "Pour l Imperium de l humanite" | cat -e l l$ de$ Pour$ humanite Imperium$ $>

Sujet de lexamen 00

Version 1.0

II.5

Exercice 04 - g_diam
Exercice : 04 g_diam

Dossier de rendu : ex04/ Fichiers rendre : *.c, *.h Fonctions Autorises : write, malloc, free Remarques : n/a

Le programme prend en paramtre une chaine de caractres. Cette chaine reprsente un graphe et est compose dune suite dartes entre les noeuds de ce graphe. Les artes sont spares par un espace. Les noeuds sont reprsentes par des nombres et les arte par deux noeuds spars par -. Par exemple, sil xiste une arte entre le noeud 2 et le noeud 3, les representations possibles de cette arte seront soit "2-3", soit "3-2". Le programme devra acher la longueur du plus long chemin suivit dun \n sachant quil est impossible de revenir en arrire. cest--dire de passer par un noeud plus dune fois. Si le nombre de paramtres transmis est dirent de 1, le programme ache \n.
$>./g_diam "17-5 5-8 8-2 2-8 2-8 17-21 21-2 5-2 2-6 6-14 6-12 12-19 19-14 14-42" | cat -e 10$ $>./g_diam "1-2 2-3 4-5 5-6 6-7 7-8 9-13 13-10 10-2 10-11 11-12 12-8 16-4 16-11 21-8 21-12 18-10 18-13 21-18" | cat -e 15$

Sujet de lexamen 00

Version 1.0

II.6

Exercice 05 - count_island
Exercice : 05

count_island Dossier de rendu : ex05/ Fichiers rendre : *.c, *.h Fonctions Autorises : open, close, read, write, malloc, free Remarques : n/a

Le programme prend en paramtre un chier contenant une serie de lignes de longueurs gales contenant soit le caractere . soit le caractere X. Ces lignes forment un rectangle de . comportant des ilots de X. Une ligne est une suite de caractres . et de caracteres X qui se termine par un retour la ligne. Les lignes font toutes la mme taille. La taille maximum dune ligne est 1024 caractres. Une colonne de caractres est forme par lensemble des caractres dans un chier qui sont spars par le mme nombre de caractres du dbut de leur ligne respective. On dit que deux caractres se touchent sils sont soit sur la mme ligne et contigus, soit sur la mme colone et sur des lignes contigues. Un ilot de X est forme par lensemble des caractres qui se touchent. Le programme doit parcourir le chier ligne par ligne et lacher lcran en remplacant tous les X des ilots par leur numro dapparition dans le chier. Le programme devra eectuer ce traitement en commancant par le debut du chier. Il ne peut pas y avoir deux rsultats dirents pour un mme chier. Si le chier est vide, quune erreur sest produite (lignes de taille direntes par exemple) ou que aucun chier nest pass en paramtre, le programme ecrit simplement le caractre du retour la ligne sur sa sortie standard. Le chier comporte au maximum 10 ilots. Vous trouverez dans le repertoire misc/ des exemples de chier.

10

Sujet de lexamen 00 Exemple :


$>cat toto .................XXXXXXXX.......................................... ....................XXXXXXXXX.......XXXXXXXX....................... .................XXXXXXXX..............XXX...XXXXX................. .....................XXXXXX.....X...XXXXXXXXXXX.................... ................................X.................................. ......XXXXXXXXXXXXX.............X.................................. ..................X.............XXXXXXXXX.......................... ..................X.........XXXXXXXXXXXX........................... ..................X................................................ XX.............................................................XXXX XX..................XXXXXXXXXXXXX.................................X ................................................................... .................................................................X. .....................XXXXX.......................................XX $> $>./count_island toto .................00000000.......................................... ....................000000000.......11111111....................... .................00000000..............111...11111................. .....................000000.....2...11111111111.................... ................................2.................................. ......3333333333333.............2.................................. ..................3.............222222222.......................... ..................3.........222222222222........................... ..................3................................................ 44.............................................................5555 44..................6666666666666.................................5 ................................................................... .................................................................7. .....................88888.......................................77 $>

Version 1.0

$>cat qui_est_la ................................................................... ...X........X.....XXXXX......XXXXXXX...XXXXXXXXXX..XXXXXXXXXX...... ...XX......XX....XX...XX....XX.....XX.....XXXX.....XXXXXXXXXX...... ...XXXX..XXXX...XX.....XX...XX.....XX......XX......XX.............. ...XX.XXXX.XX...XX.....XX...XX.....XX......XX......XX.............. ...XX...X..XX...XX.....XX...XXXXXXXX.......XX......XXXXX........... ...XX......XX...XXXXXXXXX...XXXX...........XX......XXXXX........... ...XX......XX..XX.......XX..XX.XX..........XX......XX.............. ...XX......XX..XX.......XX..XX...X.........XX......XX.............. ...XX......XX..XX.......XX..XX....X......XXXXXX....XXXXXXXXXX...... ...XX......XX.XX.........XX.XX.....XX..XXXXXXXXXX..XXXXXXXXXX..X... ................................................................... $> $>./count_island qui_est_la ................................................................... ...0........0.....11111......2222222...3333333333..4444444444...... ...00......00....11...11....22.....22.....3333.....4444444444...... ...0000..0000...11.....11...22.....22......33......44.............. ...00.0000.00...11.....11...22.....22......33......44.............. ...00...0..00...11.....11...22222222.......33......44444........... ...00......00...111111111...2222...........33......44444........... ...00......00..11.......11..22.22..........33......44.............. ...00......00..11.......11..22...5.........33......44.............. ...00......00..11.......11..22....6......333333....4444444444...... ...00......00.11.........11.22.....77..3333333333..4444444444..8... ................................................................... $>

$>cat -e rien $>./count_island rien | cat -e $ $>

11

Sujet de lexamen 00

Version 1.0

II.7

Exercice 06 - Time Lord


Exercice : 06 Time Lord

Dossier de rendu : ex06/ Fichiers rendre : secret Fonctions Autorises : Tout, absolument tout ce que vous pouvez imaginer Remarques : n/a

Vous trouverez un executable nomm time_lord dans le rpertoire misc/ de cet examen. Quand vous xcutez ce binaire, il ache le nombre de secondes restantes avant dacher la phrase secrte. Quand le nombre de secondes est dpass, le binaire ache la phrase secrte. Votre travail consiste trouver cette phrase secrte par nimporte quel moyen. Vous devez copier la phrase secrte telle quelle sans AUCUN caractre supplmentaire dans un chier nomm secret. Vous devez rendre ce chier avec la bonne phrase pour valider cet exercice.

12