Bolt Out Of The Blue es-419 Explainer

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
};
1 Like