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é :
Et voici le code que j'ai envoyé :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
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"...
Partager