🙋♂️ Tengo una evaluación en javascript aquí está:
Meta:
En la cultura china, es común durante las celebraciones dar "sobres rojos" que contienen un poco de dinero. Muy a menudo, las generaciones adultas dan a las generaciones más jóvenes. Desea crear una aplicación de WeChat para ayudar a los abuelos a compartir su presupuesto de donación entre sus nietos.
Escribir un programa que calcule el número de "regalos de la suerte" (igual a 8) según el presupuesto de dinero y el número de nietos regalados
Marcha:
Muchas reglas, mezclando tradición y superstición, enmarcan este regalo:
Las donaciones no deben contener la cantidad 4, como suena a "muerto" es favorable donar una cantidad de 8, como suena a "fortuna" sería desaprobado no darle nada a uno de los nietos su algoritmo debe devolver el número de donaciones igual a 8 respetando las siguientes reglas:
Gastar todo el presupuesto (a menos que haya suficiente presupuesto para dar 8 a todos) No dar 4 (por tradición, el presupuesto nunca será 4) No dar 0 (a menos que el presupuesto no sea suficiente) Otorgar un máximo de 8 una vez que se cumplan las reglas anteriores implementación respetada:
implementar la función luckyMoney(dinero,regalados) que:
tome como entradas los números enteros dinero y regalos con:
0 <=dinero< 100
0 <= regalados <10
y devuelve el número de donaciones igual a 8 como un número entero
function luckyMoney(money,giftees) { //write your code here // to debug : console.error('Debug messages..."); return -1; }Así que seguí adelante e implementé la función de la siguiente manera:
function luckyMoney(money,giftees){ if (money % 8 ===0){ return (money/8) }else if(money%4===0){ return 0} }creo que mi codigo esta mal
¿Qué opinas, por favor?
Una solución recursiva podría ser la más fácil.
function luckyMoney(money, giftees) { if (money === 4) { throw new Error("You cannot give 4"); } if (money >= giftees * 8) { // There is enough to give everyone 8 return giftees; } if (money < 8 + giftees - 1 || money === 12) { // There is not enough to give anyone 8, or giving someone 8 would mean the next person gets 4 (unlucky) or someone will get 0 (not allowed) return 0; } // Otherwise, the number of eights must be one greater than if we gave (money - 8) to (giftees - 1) return 1 + luckyMoney(money - 8, giftees - 1); } const testCases = [[8, 1, 1], [8, 2, 0], [12, 2, 0], [13, 2, 1], [13, 3, 1], [16, 2, 2], [100, 10, 10], [100, 13, 11]]; for (const [money, giftees, expectedResult] of testCases) { result = luckyMoney(money, giftees); console.log(money, giftees, expectedResult, result); }Alternativamente, aquí hay una versión no recursiva con un bucle. Puede haber una solución matemática pura sin bucles que sería más simple, pero no estoy seguro de cuál sería.
function luckyMoney(money, giftees) { if (money >= giftees * 8) { return giftees; } let r = 0; while (money >= 8 + giftees - r && money !== 12) { r++; money -= 8; } return r; }