Bonjour à tous,

J'ai récemment passé un entretien pour un poste de développeur full stack et j'ai eu un test de code JavaScript a effectué. Je n'ai malheureusement pas été retenu. Est-ce que quelqu'un pourrait m'aider à identifier la raison de mon échec ?

Le test était découpé en deux parties.

La première partie consistait à écrire un programme qui consommait l'API breaking bad (https://breakingbadapi.com/).
Le programme devait recevoir en paramètre une liste de personnages de la série et renvoyer les épisodes où tous les personnages passés en paramètres étaient présents à la fois.

Le programme devait répondre à l'appel suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
const result = await breakingBad(["Char1", "Char2"])
ou bien

Code : Sélectionner tout - Visualiser dans une fenêtre à part
const result = await breakingBad("Char1")
Voici la solution que j'ai proposé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const axios = require('axios').default;
const breakingBadAPIURL = "https://breakingbadapi.com/api";
const breakingBadAPI = {
  episodes: `${breakingBadAPIURL}/episodes`
}
 
module.exports = async function breakingBad(...characters) {
  characters = characters.flat();
 
  try {
    let response = await axios.get(breakingBadAPI.episodes);
    let episodes = response.data.filter(episode => characters.length && characters.every(c => episode.characters.includes(c)));
    let output = episodes.map(episode => `S${episode.season.trim().padStart(2, '0')}${episode.episode.trim().padStart(2, '0')} - ${episode.title}`);
    return output;
  } catch (error) {
    throw error;
  }
 
}
La deuxième partie du test consistait à devoir écrire une classe Robot avec une méthode execute. La méthode execute permettait de simuler les déplacements d'un robot dans un espace en 2D. 3 actions étaient possibles pour le robot : turn right, turn left ou advance.
La méthode execute acceptait donc en paramètres une chaîne de caractères du type suivant : "4 2 NORTH LAARAAR". Ce qui signifie que le point de départ du Robot était en x:4, y:2 et son orientation vers le nord. En suivant les instructions LAARAAR (L = turn left, R = turn right et A = advance), le programme devait renvoyer le point d'arrivée du robot, soit la chaîne de caractères suivantes : "2 4 EAST".

Voici la solution que j'ai proposé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
const ACTIONS = {TURN_LEFT: 'L', TURN_RIGHT: 'R', ADVANCE: 'A'}
const DIRECTIONS = {NORTH: 1, EAST: 2, SOUTH: 3, WEST: 4};
 
module.exports = class Robot {
 
  execute(instructions) {
    instructions = instructions.split(' ');
    let position = {x: parseInt(instructions[0]), y: parseInt(instructions[1])}
    let direction = DIRECTIONS[instructions[2]];
    let actions = instructions[3];
 
    [...actions].forEach(action => {
      switch(action) {
        case ACTIONS.TURN_LEFT:
          direction = direction == DIRECTIONS.NORTH ? DIRECTIONS.WEST : direction - 1;
          break;
        case ACTIONS.TURN_RIGHT:
          direction = direction == DIRECTIONS.WEST ? DIRECTIONS.NORTH : direction + 1;
          break;
        case ACTIONS.ADVANCE:
          switch(direction) {
            case DIRECTIONS.NORTH:
              position.y += 1;
              break;
            case DIRECTIONS.EAST:
              position.x += 1;
              break;
            case DIRECTIONS.SOUTH:
              position.y -= 1
              break;
            case DIRECTIONS.WEST:
              position.x -= 1;
              break;
          }
          break;
      }
    });
 
    return `${position.x} ${position.y} ${direction}`;
  }
 
}
Ca fait un peu beaucoup à lire ! Mais si quelqu'un a une idée de la raison de mon échec, cela pourrait grandement m'aider à avancer.

Je vous remercie par avance !