Si quieres construir algo usando una Raspberry Pi, probablemente uses 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 de hecho que, si imprimieras en ellas el valor de la resistencia, sería difícil de leer. Para sortear este problema, los fabricantes imprimen en las resistencias bandas codificadas por colores que indican sus valores de resistencia.
Cada banda actúa como un dígito de un número. Por ejemplo, si imprimieran una banda de color brown (valor 1) seguida de una banda de color green (valor 5), se traduciría al número 15. En este ejercicio, vas a crear un programa útil para no tener que recordar los valores de las bandas. El programa tomará 3 colores como entrada y dará como salida el valor correcto, en ohms. 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 Resistor Color Duo descifraste los dos primeros colores.
Por ejemplo: orange-orange daba el valor principal 33.
El tercer color indica cuántos ceros hay que añadir al valor principal.
El valor principal más los ceros nos da un valor en ohms.
Para el ejercicio no importa lo que sean realmente los ohms.
Por ejemplo:
(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 dicho en lenguaje llano en lugar de jerga matemática.)
Este ejercicio consiste en traducir los colores a una etiqueta:
"... ohms"
Así, una entrada de "orange", "orange", "black" debería devolver:
"33 ohms"
Cuando llegamos a resistencias más grandes, se usa un prefijo métrico para indicar una magnitud mayor de ohms, como «kiloohms». Es similar a decir «2 kilómetros» en lugar de «2000 metros», o «2 kilogramos» para «2000 gramos».
Por ejemplo, una entrada de "orange", "orange", "orange" debería devolver:
"33 kiloohms"
Tienes que implementar las funciones label y ohms. Puedes usar la firma que se proporciona 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 un manejo más eficiente de datos textuales, se puede usar el tipo Text.
Como ampliación opcional de este ejercicio, puedes
Leer sobre los tipos de string en Haskell.
Añadir - 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.
Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.