Si quieres construir algo con una Raspberry Pi, probablemente usarás resistencias. Para este ejercicio, necesitas saber dos cosas sobre ellas:
Para resolver este problema, los fabricantes imprimen franjas codificadas por color en las resistencias para indicar sus valores de resistencia. Cada franja tiene una posición y un valor numérico.
Las primeras 2 franjas de una resistencia tienen un esquema de codificación simple: cada color se asigna a un solo número. Por ejemplo, si imprimieran una franja de color brown (valor 1) seguida de una franja de color green (valor 5), se traduciría al número 15.
En este ejercicio vas a crear un programa útil para que no tengas que recordar los valores de las franjas. El programa recibirá nombres de colores como argumentos y devolverá un número de dos dígitos, ¡incluso si recibe más de dos colores!
Los colores de las franjas se codifican de la siguiente manera:
Del ejemplo anterior: brown-green debe devolver 15, y brown-green-violet también debe devolver 15, ignorando el tercer color.
Necesitas implementar la función
value :: (Color, Color) -> Int
que solo acepta dos colores y produce el componente numérico del valor de la resistencia.
Extra: pruebas de propiedades:
Este ejercicio es una buena oportunidad para escribir algunas pruebas de propiedades. Si nunca has escrito ninguna, aquí tienes algunos recursos:
Hemos incluido en el archivo de pruebas un ejemplo de prueba de propiedades con QuickCheck.
Ejemplos de propiedades que se pueden probar:
value (x, y) >= 10 para todos los (x, y) donde x no sea Black
Llamar a show con value (x, y) produce el reverse invertido de llamar a show con value (y, x).
Todos los colores tienen nombres únicos. (Para dos colores cualesquiera, si los colores son distintos, sus nombres también lo son.)
Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.