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.
Tienes que implementar la función
value :: (Color, Color) -> Int
que solo acepta dos colores y produce el valor numérico 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 un ejemplo de prueba de propiedades con QuickCheck en el fichero de pruebas.
Ejemplos de propiedades que se pueden comprobar:
value (x, y) >= 10 para todos los (x, y) en los que x no sea Black
Llamar a show sobre value (x, y) produce el resultado de aplicar reverse al String que devuelve llamar a show sobre value (y, x).
Todos los colores tienen nombres únicos. (Para cualesquiera dos colores, 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.