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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Test sur une fonction "incomplet" paraît-il


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Points : 586
    Points
    586
    Par défaut Test sur une fonction "incomplet" paraît-il
    Bonjour,


    J'aurais eu besoin de votre avis, par curiosité, parce que je ne comprends absolument pas. Voilà, il y'a 2 semaines j'ai eu à faire un test pour une embauche (depuis chez moi). J'ai complété le test, commenté mon code, et même pris la liberté de légèrement modifier le code pour qu'il renvoie autre chose que "-1" en cas de mauvais input (ce qui me semblait totalement stupide, vu que c'est un résultat "normal" pour deux inputs valide possible).

    Bref, au bout d'une semaine, j'apprends que j'ai raté le test : le code serait "incomplet", et on m'invite à le revoir... Je relis l'énoncé, regarde mon code... Je renvoie mon code comme il l'était ne voyant absolument pas le problème. Ils ont visiblement dit que c'est toujours incomplet, j'ai échoué définitivement !


    Voici l'énoncé :

    La fonction « Magic Inc »


    function magic_inc(arguments) {
    //code
    }

    L’objectif de cette fonction est d’incrémenter ou décrémenter une valeur en appliquant la suite logique suivante :
    - inc : 0.5 > 0.6 > 0.7 > 0.8 > 0.9 > 1 > 2 > 3 > 4 > 5 > 6 > 7 > 8 > 9 > 10 > 20 > 30 > 40 > 50 > 60 > 70 > 80 > 90 > 100 > 200 > 300 > 400 > etc.
    - dec : 0.5 > 0.4 > 0.3 > 0.2 > 0.1 > 0.09 > 0.08 > 0.07 > 0.06 > 0.05 > 0.04 > 0.03 > 0.02 > 0.01 > 0.009 > 0.008 > 0.007 > 0.006 > 0.005 > etc.

    Applicable sur des valeurs négatives. Exemple :
    - inc : -0.3 > -0.2 > -0.1 > -0.09 > -0.08 > -0.07 > etc.
    - dec : -0.7 > -0.8 > -0.9 > -1 > -2 > -3 > -4 > -5 > etc.

    Toute valeur entrée « mal formatée » doit retourner le résultat converti suivant, selon la logique des exemples ci-dessous :
    - inc : 22 > 30 > 40 > etc.
    - inc : 0.76 > 0.8 > 0.9 > etc.
    - inc : -0.526 > -0.4 > -0.3 > etc.
    - dec : 26 > 10 > 9 > etc.
    - dec : 0.24 > 0.1 > 0.09 > etc.
    - dec : -18 > -20 > -30 > etc.

    Pour des valeurs « non numériques » ou « 0 », la fonction devra retourner « -1 ».

    Exercice: rédiger les lignes de code pour réaliser cette fonction dans les 2 langages : PHP et Javascript.
    Ex:
    magic_inc(0.5,"inc") ==> 0.6
    magic_inc(0.5,"dec") ==> 0.4
    Et voici le code que j'ai envoyé :

    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
    43
    44
    45
    <?php
         /**
          * Increment or decrement $value, rounded to one significant number. $value may be
          * anything, such as an integer, a float, etc., 
          * @param float|int $value
          * @param string $operator
          * @return double
          * @throws \InvalidArgumentException
          */
     
    const AVAILABLE_OPERATORS	= array('inc', 'dec');
     
    function magic_inc($value, $operator = 'inc')
    {
    	if(!isset($value)) // If $value parameter is not set, returns and let PHP throw the exception.
    		return;
     
    	if(!is_float($value) && !is_int($value)) // If $value isn't a number, throws an \InvalidArgumentException.
    		throw new \InvalidArgumentException('magic_inc() expects parameter 1 to be a non-null integer or float, "'.gettype($value).'" given.');
     
    	if($value === 0) // If value equals 0, which can not be processed, throws an \InvalidArgumentException.
    		throw new \InvalidArgumentException('magic_inc() expects parameter 1 to be a non-null integer or float, "0" given.');
     
    	if(!is_string($operator)) // If $operator is not a string, throws an \InvalidArgumentException.
    		throw new \InvalidArgumentException('magic_inc() expects optionnal parameter 2 to be a string, "'.gettype($operator).'" given.');
     
    	if(!in_array($operator, AVAILABLE_OPERATORS)) // If $operator value is not available, throws an \InvalidArgumentException.
    		throw new \InvalidArgumentException('magic_inc() expects optionnal parameter 2 to be "inc" for increment, "dec" for decrement, "'.$operator.'" given.');
     
     
    	$absValue	= abs($value); // Gets the absolute value for further processing.
    	$sign	= $value/$absValue; // Stores the sign of $value.
     
    	$expUnit		= pow(10, floor(log10($absValue))); // Gets the exponential unit of $value.
    	$significantNum		= floor($absValue/$expUnit); // Gets the significant number of $value.
    	$roundedAbsValue	= $significantNum*$expUnit; // Gets the rounded value to the first significant number of $value
     
    	// If increment, add one exponential unit to the rounded absolute value, else, decrement.
    	if($operator == 'inc') 
    		$result	= $roundedAbsValue+$expUnit;
    	else
    		$result	= $roundedAbsValue-$expUnit;
     
    	return $sign*$result; // Returns the result with the right sign.
    }

    La seule chose que j'ai changé après le premier retour négatif, ne voyant pas quoi ajouter... Ben je leur ai mis les appels à la fonction comme ça ils voient que le résultat est correct en lançant simplement le script... Ca me paraît absolument inutile mais bon !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_dump(magic_inc(0.5,"inc"));
    var_dump(magic_inc(0.5,"dec"));

    Quelqu'un voit ou est le problème ?? Parce que je dois avoué que je suis resté sur le cul : soit j'allais être embauché dans une boîte de guignols, soit c'est moi qui suit vraiment mauvais... Surtout qu'ils m'ont été vendu comeme "ultra-sérieux" et recherchant de "vrais talents"...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Exercice: rédiger les lignes de code pour réaliser cette fonction dans les 2 langages : PHP et Javascript.
    donc si tu n'as écrit que le code en PHP, c'est effectivement incomplet.

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    sans compter que ton code ne répond pas au cahier des charges :
    Pour des valeurs « non numériques » ou « 0 », la fonction devra retourner « -1 ».
    et toi tu as fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if($value === 0) // If value equals 0, which can not be processed, throws an \InvalidArgumentException.
        throw new \InvalidArgumentException('magic_inc() expects parameter 1 to be a non-null integer or float, "0" given.');
    tu aurais dû faire ce qui t'était demandé, c'est un test de recrutement, tu dois répondre à ce qui est demandé et rien de plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($value === 0) 
        return -1;

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Points : 586
    Points
    586
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,


    donc si tu n'as écrit que le code en PHP, c'est effectivement incomplet.
    Bien sûr que j'ai également envoyer du code JS, juste aucun intérêt à l'ajouter ici vu que c'est quasiment la même chose...


    Citation Envoyé par rawsrc Voir le message
    Salut,

    sans compter que ton code ne répond pas au cahier des charges :

    et toi tu as fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if($value === 0) // If value equals 0, which can not be processed, throws an \InvalidArgumentException.
        throw new \InvalidArgumentException('magic_inc() expects parameter 1 to be a non-null integer or float, "0" given.');
    tu aurais dû faire ce qui t'était demandé, c'est un test de recrutement, tu dois répondre à ce qui est demandé et rien de plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($value === 0) 
        return -1;
    Ok, donc même quand dans leurs annonces ils nous bassinent avec leurs grands mots (surtout "être force de proposition"...), on fait juste l'idiot et on fait exactement ce qu'ils demandent même si ça veut dire produire du mauvais code ?? En précisant que je ne l'ai pas inclus, mais j'ai précisé dans un commentaire juste avant la fonction que j'ai décidé de faire autrement dans les cas ou l'argument est erroné ou égale à 0, en expliquant pourquoi et les avantages de ce que j'ai proposé... J'étais même persuadé de marquer des points en agissant ainsi, en montrant que justement je peux réfléchir et offrir quelque chose de mieux que demandé, voire que c'était justement volontaire de la part des recruteurs...

    Parce que "magic_inc(-0.9, 'dec')", "magic_inc('blah', 'inc')" et "magic_inc(0, 'inc')" renverront toutes deux "-1"... Sauf que deux des trois sont des erreurs... et qu'on a aucun moyen de le savoir... Bref, pour moi c'est inutilisable...

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Tu crois encore aux grands mots du genre "force de proposition", "ultra-sérieux" et recherchant de "vrais talents"? C'est juste de la pub, sauf si tu connais déjà très bien la boîte ou des gens qui y bossent.

    Hypothèses possibles dans ton cas:

    - celui qui a reçu le code n'y connait pas grand chose en PHP, il a juste testé la fonction et a vu qu'elle ne donnait pas le résultat attendu -> rejet
    - celui qui a reçu le code n'y connait pas grand chose en PHP mais a écrit la spec. Voyant que tu as proposé une solution meilleure que son "booléen négatif" (lol), il s'est vexé -> rejet
    - Ils voulaient tester ta capacité à répondre à 100% à une spec précise, la créativité faisant l'objet d'un autre test ultérieur (ou ils ne cherchent pas la créativité, juste un développeur qui fait ce qu'on lui demande) -> rejet
    - Ils avaient plusieurs bons candidats et il faut bien trouver un critère pour éliminer tous sauf un -> rejet

    Tu peux toujours leur demander pourquoi ils ont rejeté ton code, en prétextant que c'est pour pouvoir t'améliorer et accroître la qualité de ton code. Si ce sont des gens intelligents, ils te répondront.

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    - celui qui a reçu le code n'y connait pas grand chose en PHP mais a écrit la spec. Voyant que tu as proposé une solution meilleure que son "booléen négatif" (lol), il s'est vexé -> rejet
    Situation bien plus courante qu'il n'y parait...
    Gros vécu. Il y a des années de ça, j'ai passé des tests de programmation et j'ai pondu une solution viable en tous points sauf que le type qui les avait conçus n'arrivait pas à comprendre.
    Bon j'ai été recalé sans raison et par la suite j'ai appris que le concepteur du test était le responsable du service...

    Donc t'inquiète, ce genre de test ne prévaut quasiment en rien de ton niveau réel.

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Points : 586
    Points
    586
    Par défaut
    D'un coté, j'espère que c'est ça... C'est juste que la femme de la boîte de recrutement, en dehors du fait de vanter que c'est une boîte ultra-sérieuse avec 800 employé dans 10 pays, m'a posé des question genre "vous utilisez des CMS ??" parce que d'après les infos qu'il lui ont donné, ils ne veulent pas de "développeur de module CMS mais de vrais dév PHP", du coup bah je me suis dis "chouette, j'y ferai peut-être des choses intéressantes et apprendre encore plus"..


    Bref, tant que vous voyez rien de "mauvais" dans mon code, tout va bien ! Merci

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par Shirraz Voir le message
    une boîte ultra-sérieuse avec 800 employé dans 10 pays
    [mode cynique]Ça c'est un code pour : "exploite des développeurs Indiens payés 150 euros par mois". [/mode cynique]

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour Shirraz (et à tous),

    Je regrette que le cabinet de recrutement ne t'ai pas donné de retour plus détaillé.

    Ta remarque sur le -1 est tout à fait pertinente et nous l'avons d'ailleurs prise en considération en mettant à jour le test.

    Pour le reste, ton code retourne effectivement des résultats erronés avec certaines valeurs.
    Et avec ton niveau, je pense que tu aurais pu facilement les identifier et les corriger si tu les avais testées.

    Quelques exemples de résultats en erreur : http://sandbox.onlinephpfunctions.co...0e37e7eeef7342
    inc -0.2 => -0.3
    inc 0.3 => 0.3
    inc -0.3 => -0.3
    inc 0.6 => 0.6
    inc 0.7 => 0.7
    dec 0.3 => 0.1
    dec 0.6 => 0.4
    dec 0.7 => 0.5
    dec 0.1 => 0
    dec -0.1 => -0
    dec 0.01 => 0
    ...

    Ce test de dev n'est pas compliqué en soi et il peut être résolu de multiples manières.
    La plupart des autres candidats l'ont d'ailleurs réussi.
    Il y a simplement un énoncé avec des exemples qu'il faut respecter.

    Au-delà des résultats, nous prêtons surtout attention à la méthode d'approche choisie et son développement/concrétisation technique.

    Merci en tout cas d'avoir pris le temps de passer le test et j'espère que tu trouveras rapidement (si pas déjà le cas).

    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26
  2. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00
  3. PerlDoc sur une fonction d'un module
    Par lesouriciergris dans le forum Modules
    Réponses: 2
    Dernier message: 13/03/2003, 20h50

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