Rutas
/
Haskell
Haskell
/
Ejercicios
/
Dúo de colores de resistencia
Dúo de colores de resistencia

Dúo de colores de resistencia

Fácil

Instrucciones

Si quieres construir algo con una Raspberry Pi, seguramente uses resistencias. Para este ejercicio, necesitas saber dos cosas sobre ellas:

  • Cada resistencia tiene un valor de resistencia.
  • Las resistencias son pequeñas, tan pequeñas que, si imprimieras el valor de resistencia en ellas, sería difícil de leer.

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:

  • black: 0
  • brown: 1
  • red: 2
  • orange: 3
  • yellow: 4
  • green: 5
  • blue: 6
  • violet: 7
  • grey: 8
  • white: 9

Del ejemplo anterior: brown-green debería devolver 15, y brown-green-violet debería devolver 15 también, ignorando el tercer color.

Pistas

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:

  1. School of Haskell.
  2. Real world Haskell

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.)

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Haskell Exercism

¿Listo para empezar Dúo de colores de resistencia?

Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.