Tracks
/
Haskell
Haskell
/
Ejercicios
/
Trío de colores de resistencia
Trío de colores de resistencia

Trío de colores de resistencia

Fácil

Instrucciones

Si quieres construir algo con una Raspberry Pi, probablemente usarás resistencias. Para este ejercicio, solo necesitas saber tres cosas sobre ellas:

  • Cada resistencia tiene un valor de resistencia.

  • Las resistencias son pequeñas, tan pequeñas que si imprimieras el valor de la resistencia en ellas, sería difícil de leer. Para solucionar este problema, los fabricantes imprimen bandas codificadas por colores sobre las resistencias para indicar sus valores de resistencia.

  • Cada banda actúa como un dígito de un 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 útil para que no tengas que recordar los valores de las bandas. El programa tomará 3 colores como entrada y devolverá el valor correcto, en ohmios. Las bandas de color se codifican de la siguiente manera:

  • black: 0

  • brown: 1

  • red: 2

  • orange: 3

  • yellow: 4

  • green: 5

  • blue: 6

  • violet: 7

  • grey: 8

  • white: 9

En Dúo de colores de resistencias descifraste los dos primeros colores. Por ejemplo: orange-orange daba el valor principal 33. El tercer color indica cuántos ceros hay que agregar al valor principal. El valor principal más los ceros nos da un valor en ohmios. Para el ejercicio no importa qué son en realidad los ohmios. Por ejemplo:

  • orange-orange-black sería 33 y ningún cero, lo que da 33 ohms.
  • orange-orange-red sería 33 y 2 ceros, lo que da 3300 ohms.
  • orange-orange-orange sería 33 y 3 ceros, lo que da 33000 ohms.

(Si las matemáticas son lo tuyo, quizá quieras pensar en los ceros como exponentes de 10. Si las matemáticas no son lo tuyo, quédate con los ceros. En realidad es lo mismo, solo que en palabras sencillas en lugar de jerga matemática.)

Este ejercicio consiste en traducir los colores a una etiqueta:

«... ohms»

Así que una entrada de "orange", "orange", "black" debería devolver:

«33 ohms»

Cuando pasamos a resistencias más grandes, se usa un prefijo métrico para indicar una magnitud mayor de ohmios, como «kiloohms». Es similar a decir «2 kilómetros» en lugar de «2000 metros», o «2 kilogramos» por «2000 gramos».

Por ejemplo, una entrada de "orange", "orange", "orange" debería devolver:

«33 kiloohms»

Pistas

Necesitas implementar las funciones label y ohms. Puedes usar la firma que te damos para label, pero no dejes que limite tu creatividad.

Este ejercicio trabaja con datos textuales. Por razones históricas, el tipo String de Haskell es sinónimo de [Char], una lista de caracteres. Para manejar datos textuales de forma más eficiente, puedes usar el tipo Text.

Como extensión opcional de este ejercicio, puedes

  • Leer sobre los tipos string en Haskell.

  • Agregar - text a tu lista de dependencias en package.yaml.

  • Importar Data.Text de la siguiente manera:

    import qualified Data.Text as T
    import           Data.Text (Text)
    
  • Ahora puedes escribir, por ejemplo, label :: Resistor -> Text y referirte a los combinadores de Data.Text como, por ejemplo, T.pack.

  • Consultar la documentación de Data.Text,

Esta parte es totalmente opcional.

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

¿Todo listo para empezar Trío de colores de resistencia?

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