IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Recalé à un entretien, quelqu'un a une idée ?


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Recalé à un entretien, quelqu'un a une idée ?
    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 !

  2. #2
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    J'ai regardé le robot :
    La petite erreur est de retourner "2 4 2" au lieu de "2 4 EAST" comme demandé, non ?

    Je trouve un peu étonnant que le nord soit dans le sens y positif, mais apparemment ça doit fonctionner comme ça.

    Ensuite, il aurait peut-être été apprécié d'avoir des propriétés "x", "y" et "direction" dans la classe.
    Je n'aurais pas encapsulé "x" et "y" dans un objet "position".
    Etc.
    Il y a d'autres détails, mais pour un premier jet, je trouve que ça va, ça répond à l'exercice sans en faire trop.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/07/2010, 14h36
  2. [Listes ou Chaines de caractères] Une idée..
    Par KiLVaiDeN dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 25/04/2006, 11h54
  3. Une idée pour utiliser ce type de fichier data??
    Par Frenchy dans le forum DirectX
    Réponses: 2
    Dernier message: 14/02/2006, 13h24
  4. Relation de dépendance entre résultats : une idée farfelue ?
    Par mdef dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 18/07/2005, 02h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo