Aller au contenu

Chez SFEIR, afin de tester les compétences techniques et la personnalité de nos candidats, nous faisons résoudre des algorithmes en pair programming avec un de nos développeurs.

Nous commençons toujours par des tests assez simples et petit à petit en fonction de l’adaptation du candidat, nous montons en difficulté.

Afin de démystifier notre processus de recrutement, nous avons fait une démonstration de ces tests d’algo à travers du pair programming, lors de notre évènement Test d’algo, mode d’emploi le 25 janvier.

Pour plus d’informations, vous pouvez consulter le replay ci-dessous.

Pendant cet évènement Simon La Personne et Guillaume Jacoutot ont interprété le rôle du candidat et de l’évaluateur qui le guide dans ses réflexions.

L'énoncé du problème se base sur le principe du bingo :

  • Un joueur possède 1 grille de 5x5 avec des numéros. Dans le cadre de cet exercice, la grille est conceptualisée par une liste de 25 éléments ; les 5 premiers éléments forment la première ligne, les 5 suivants la deuxième, …
  • Des numéros sont tirés au hasard les uns après les autres.
  • Si une grille possède le numéro choisi, un jeton est placé sur le numéro. Dans le cadre de cet exercice, un jeton placé est symbolisé par le numéro qui passe à -1.
  • Si une ligne ou une colonne est complète, c’est gagné !

Le but de l’exercice est d’écrire la méthode qui vérifie si une grille est gagnante, nous vous partageons le code proposé par notre “candidat”. D’autres solutions sont possibles.

La résolution

bool VerifierGagnant(int grille[25]) {
    // ligne
    for (int i = 0; i < 25; i += 5) {
        int count = 0;
        for (int element : std::vector<int>(grille + i, grille + i + 5)) {
            if (element == -1)
                count++;
            else
                break;
            if (count == 5)
                return true;
        }
    }
    // colonne
    for (int i = 0; i < 5; i++) {
        int count = 0;
        for (int j = i; j < 25; j += 5) {
            if (grille[j] == -1)
                count++;
            else
                break;
        }
        if (count == 5)
            return true;
    }
    return false;
}

Dernier