Si quieres construir algo con una Raspberry Pi, seguramente uses resistencias. Para este ejercicio, necesitas saber dos cosas sobre ellas:
Para sortear este problema, los fabricantes imprimen bandas de colores en las resistencias para indicar sus valores de resistencia. Cada banda tiene una posición y un valor numérico.
Las 2 primeras bandas de una resistencia siguen un esquema de codificación sencillo: cada color se corresponde con un único número. Por ejemplo, si imprimieran una banda brown (valor 1) seguida de una banda green (valor 5), se traduciría al número 15.
En este ejercicio vas a crear un programa muy útil para no tener que recordar los valores de las bandas. El programa recibirá nombres de colores como entrada y devolverá un número de dos dígitos, ¡incluso si la entrada tiene más de dos colores!
Los colores de las bandas están codificados de la siguiente manera:
Del ejemplo anterior: brown-green debería devolver 15, y brown-green-violet debería devolver 15 también, ignorando el tercer color.
Este ejercicio está planteado como una continuación de Resistor Color y se basa en él.
Aunque puedes resolver los ejercicios de práctica en cualquier orden, te animamos a seguir la secuencia sugerida.
En este ejercicio, se te da la sintaxis de los colores ya predefinida mediante el prefijo c*, p. ej., c*black.
A continuación, debes definir una sintaxis que asocie una secuencia de colores con un número, según las instrucciones.
Los colores van entre *[[ y ]] y se separan por , , p. ej., *[[c*black, c*yellow, c*violet]].
Es probable que esta tarea te exija usar notaciones o macros. Puede que te interese consultar una referencia.
Como la sintaxis nueva se expande en tiempo de compilación, cualquier test fallaría al compilar a menos que esté definida toda la sintaxis necesaria.
Por este motivo, en lugar de apoyarnos en tests tradicionales en tiempo de ejecución, usamos #guard_msgs.
Este comando compara el docstring indicado con un mensaje generado por otro comando, en este caso #eval, y notifica un error si son distintos.
Puedes considerar la ausencia de error como un test superado.
Si trabajas en local o en el entorno de pruebas en línea de Lean, recibirás información inmediata sobre cualquier error notificado por #guard_msgs a través de InfoView de Lean.
Actualmente, el ejecutor de tests en línea no admite importar la biblioteca de metaprogramación completa de Lean.
Aunque eres libre de usar cualquier funcionalidad disponible en Lean por defecto, incluidas las que están dentro del espacio de nombres Lean, añadir import Lean o importar módulos concretos del espacio de nombres Lean hará que tu envío falle al enviarlo a Exercism.
Ten en cuenta que no es necesario importar la biblioteca de Lean para resolver este ejercicio.
Regístrate en Exercism para aprender y dominar Lean con 100 ejercicios y mentoría humana real, todo gratis.