Explicador de De repente
Objetivo de este acertijo: Aclarar los cuadros arreglando la función lighter
.
Tutorial de la solución: Primero, entendamos todas las partes de este programa. Hay dos funciones, darker
y lighter
, que toman un object
y devuelven una versión más oscura o más clara de ese object. Luego, hay una serie de llamadas de función anidadas; veamos la primera: drawBox(darker(darker(rgbObject)))
. Si comienzas en el paréntesis interior y resuelves: comienzas con un rgbObject
que se oscurece, luego se oscurece nuevamente y luego esa versión oscura-oscura del color original se pone en drawBox
. Puedes ver que cuando comienzas, los primeros tres cuadros se tornan menos oscuros, pero luego se detiene. Las últimas dos llamadas drawBox
utilizan la función lighter
para tratar de que los cuadros sean más claros. Averigüemos por qué la función darker
funciona, pero la función lighter
no lo hace. Ambas funciones tomarán una entrada y la almacenarán en object
. Luego, a cada componente (rojo, verde, azul) se les agrega o se le resta 50. Ese nuevo número se almacena en las propiedades rojo, verde y azul de newObject
. ¡Eso significa que newObject
tiene el object más oscuro o más claro! Luego, se genera una variable de la función con la tecla return
. El newObject
se debe devolver y ahí es donde la función lighter
tiene un defecto.
Solución del código de ejemplo:
function darker(object) {
var newObject = {
red: object.red - 50,
green: object.green - 50,
blue: object.blue - 50
};
return newObject;
}
function lighter(object) {
var newObject = {
red: object.red + 50,
green: object.green + 50,
blue: object.blue + 50
};
return newObject;
}
drawBox(darker(darker(rgbObject)));
drawBox(darker(rgbObject));
drawBox(rgbObject);
drawBox(lighter(rgbObject));
drawBox(lighter(lighter(rgbObject)));
Conceptos de JavaScript: expresión binaria (+, -), bloque de código (función), funciones de llamada, anidamiento de llamadas, identificadores
Conceptos de Grasshopper: drawBox()
Código adicional (código oculto que se ejecuta antes del código del acertijo):
var rgbObject = {
red : 25,
green : 25,
blue : 175
};