Création d'un jeu de données d'élèves
- Par Benoît
- Publié le 23 juin 2014
- Licence CC BY-SA 4.0
Enoncé
Pour cet exercice le principe est de créer un jeu de données d'étudiants avec pour chacun un nom, un prénom et des notes.
Entrée
N
, qui représente le nombre d'élèves à générer. Il est conseillé de tester
avec 10, 100, 1 000 voire 10 000 élèves.
Sortie
La sortie doit être de la forme :
(prénom), (nom) (score 1) (score 2) (score 3) (score 4) (score 5)
Sans les parenthèses, évidemment.
Bien sûr le nom, le prénom ainsi que les notes doivent être aléatoires (pas forcément des vrais noms).
Bonus
Aucun doublon dans les noms et prénoms.
Travaux réalisés
- SuperMonkey : pastebin, swfcabin - Haxe
- Blazed : textup - Java
- Naemy : JSFiddle - JavaScript
- Moi-même : pastebin 1, pastebin 2 - Haxe
Mon code
package;
// Un élève = un nom, un prénom et une liste de notes (ils n'ont pas de vies !)
typedef Student = { name:String, firstname:String, notes:Array<Int> };
class ExoLundi1 {
public static function main() {
// Nombre d'élèves voulus
var n = Std.parseInt(Sys.stdin().readLine());
// La liste des élèves
var students = new Array<Student>();
// Les noms possibles
var names = [
"Martin", "Bernard", "Thomas", "Petit", "Robert",
"Richard", "Durand", "Dubois", "Moreau", "Laurent",
"Simon", "Michel", "Lefebvre", "Leroy", "Roux",
"David", "Bertrand", "Morel", "Fournier", "Girard",
"Bonnet", "Dupont", "Lambert", "Fontaine", "Rousseau",
"Vincent", "Muller", "Lefevre", "Faure", "Andre"
];
// Les prénoms qui seront générés
var firstname_part1 = [
"Ni", "Ya", "Seba", "Si", "Mae", "Ro", "Isa", "Ce", "Ju",
"Vic", "Be", "Chri", "Bea", "Elo", "A", "Hu"
];
var firstname_part2 = [
"colas", "nnick", "stien", "mon", "va", "main", "belle", "dric", "lia",
"tor", "noit", "stophe", "trice", "die", "nais", "go",
"ger", "lie", "ole"
];
// Génération de 1000 élèves extraordinaires
var exists:Bool;
var name:String;
var firstname:String;
for (i in 0 ... n) {
do {
exists = false;
name = rand_array(names).toUpperCase();
firstname = rand_array(firstname_part1) + rand_array(firstname_part2);
for (student in students) {
if (name == student.name && firstname == student.firstname) {
exists = true;
break;
}
}
} while (exists);
students.push({
name: name,
firstname: firstname,
notes: [ for (j in 0 ... 5) rand(0, 20) ]
});
}
// Affichage des élèves
for (student in students) {
Sys.println('${student.name}, ${student.firstname} ${student.notes.join(" ")}');
}
// Petite pause
Sys.stdin().readLine();
}
// Génération d'un nombre [ min ; max ]
public static inline function rand(min:Int, max:Int) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// Récupération d'une valeur aléatoire dans une liste
public static inline function rand_array(array:Array<String>) {
return array[rand(0, array.length - 1)];
}
}