2020-03-19 22:59:06 +01:00
const errorHandling = require ( '../../utils/errorHandling' ) ;
2020-03-17 18:35:03 +01:00
const { requiredFields } = require ( '../../config/errors' ) ;
const formatNumberResult = require ( '../secondary/formatNumberResult' ) ;
/ * *
* @ description Vérifie si un nombre fait partie des nombres d ' Armstrong .
* @ param { Number } number - Le nombre à tester
* @ returns { Object } Un objet contenant l 'explication en html et le booléen si oui ou non c' est un nombre d ' armstrong
* @ examples armstrongNumber ( 153 ) → 153 est un nombre d ' Armstrong , car 1 < sup > 3 < / s u p > + 5 < s u p > 3 < / s u p > + 3 < s u p > 3 < / s u p > = 1 5 3 .
* /
function armstrongNumber ( number ) {
let numberString = number . toString ( ) ;
let numberStringLength = numberString . length ;
let result = 0 ;
let resultString = "" ;
for ( let index = 0 ; index < numberStringLength ; index ++ ) {
result = result + parseInt ( numberString [ index ] ) * * numberStringLength ;
resultString = resultString + " + " + numberString [ index ] + "<sup>" + numberStringLength + "</sup>" ;
}
const formattedNumber = formatNumberResult ( number ) ;
const isArmstrongNumber = ( result === number ) ;
return {
isArmstrongNumber ,
2020-03-24 16:11:55 +01:00
resultHTML : ` <p> ${ formattedNumber } ${ isArmstrongNumber ? "" : "n'" } est pas un nombre d'Armstrong, car ${ resultString . slice ( 2 ) } = ${ formatNumberResult ( result ) } .</p> `
2020-03-17 18:35:03 +01:00
}
}
/* OUTPUTS */
2020-03-24 17:02:30 +01:00
module . exports = armstrongNumberOutput = ( { res , next } , argsObject ) => {
2020-03-17 18:35:03 +01:00
let { number } = argsObject ;
// S'il n'y a pas les champs obligatoire
if ( ! ( number ) ) {
2020-03-19 22:59:06 +01:00
return errorHandling ( next , requiredFields ) ;
2020-03-17 18:35:03 +01:00
}
2020-03-24 16:11:55 +01:00
2020-03-17 18:35:03 +01:00
// Si ce n'est pas un nombre
number = parseInt ( number ) ;
2020-03-17 19:37:45 +01:00
if ( isNaN ( number ) || number <= 0 ) {
2020-03-19 22:59:06 +01:00
return errorHandling ( next , { message : "Veuillez rentré un nombre valide." , statusCode : 400 } ) ;
2020-03-17 18:35:03 +01:00
}
2020-03-19 22:59:06 +01:00
return res . status ( 200 ) . json ( armstrongNumber ( number ) ) ;
2020-03-17 18:35:03 +01:00
}