Se você quer construir algo usando um Raspberry Pi, provavelmente vai usar resistores. Para este exercício, você só precisa saber três coisas sobre eles:
Cada resistor tem um valor de resistência.
Resistores são pequenos. Tão pequenos que, se você imprimisse o valor da resistência neles, seria difícil de ler. Para contornar esse problema, os fabricantes imprimem faixas codificadas por cores nos resistores para indicar seus valores de resistência.
Cada faixa funciona como um dígito de um número. Por exemplo, se eles imprimissem uma faixa brown (valor 1) seguida por uma faixa green (valor 5), isso corresponderia ao número 15. Neste exercício, você vai criar um programa útil para não precisar lembrar os valores das faixas. O programa receberá 3 cores como entrada e retornará o valor correto, em ohms. As faixas de cores são codificadas da seguinte forma:
black: 0
brown: 1
red: 2
orange: 3
yellow: 4
green: 5
blue: 6
violet: 7
grey: 8
white: 9
No Duo de Cores de Resistores, você decodificou as duas primeiras cores.
Por exemplo: orange-orange deu o valor principal 33.
A terceira cor representa quantos zeros precisam ser adicionados ao valor principal.
O valor principal mais os zeros nos dá um valor em ohms.
Para o exercício, não importa o que ohms realmente são.
Por exemplo:
(Se você curte matemática, talvez queira pensar nos zeros como expoentes de 10. Se não curte, fique com os zeros. É realmente a mesma coisa, só que em linguagem comum em vez de jargão matemático.)
Este exercício é sobre traduzir as cores para um rótulo:
"... ohms"
Então, uma entrada de "orange", "orange", "black" deve retornar:
"33 ohms"
Quando chegamos a resistores maiores, um prefixo métrico é usado para indicar uma magnitude maior de ohms, como "kiloohms". Isso é parecido com dizer "2 quilômetros" em vez de "2000 metros", ou "2 quilogramas" para "2000 gramas".
Por exemplo, uma entrada de "orange", "orange", "orange" deve retornar:
"33 kiloohms"
Você precisa implementar as funções label e ohms. Você pode usar a
assinatura fornecida para label, mas não deixe que ela limite sua criatividade.
Este exercício trabalha com dados textuais. Por razões históricas, o tipo
String do Haskell é sinônimo de [Char], uma lista de caracteres. Para lidar
com dados textuais de forma mais eficiente, é possível usar o tipo Text.
Como uma extensão opcional deste exercício, você pode
Ler sobre tipos de string em Haskell.
Adicionar - text à sua lista de dependências em package.yaml.
Importar Data.Text da seguinte forma:
import qualified Data.Text as T
import Data.Text (Text)
Agora você pode escrever, por exemplo, label :: Resistor -> Text e se referir aos combinadores de Data.Text como, por exemplo, T.pack.
Consultar a documentação de Data.Text,
Esta parte é totalmente opcional.
Crie sua conta no Exercism para aprender e dominar Haskell com 107 exercícios e mentoria humana de verdade, tudo de graça.