Se queres construir algo com um Raspberry Pi, provavelmente vais usar resistências. Para este exercício, precisas de saber duas coisas sobre elas:
Para contornar este problema, os fabricantes imprimem nas resistências bandas codificadas por cores, para indicar os seus valores de resistência. Cada banda tem uma posição e um valor numérico.
As primeiras 2 bandas de uma resistência têm um esquema de codificação simples: cada cor corresponde a um único número. Por exemplo, se imprimissem uma banda brown (valor 1) seguida de uma banda green (valor 5), isso daria o número 15.
Neste exercício vais criar um programa útil para não teres de decorar os valores das bandas. O programa vai receber nomes de cores e devolver um número de dois algarismos, mesmo que receba mais do que duas cores!
As cores das bandas estão codificadas da seguinte forma:
A partir do exemplo acima: brown-green deve devolver 15, e brown-green-violet deve devolver 15 também, ignorando a terceira cor.
Precisas de implementar a função
value :: (Color, Color) -> Int
que aceita apenas duas cores e produz a componente numérica da resistência do resistor.
Bónus - testes de propriedades:
Este exercício é uma boa oportunidade para escreveres alguns testes de propriedades. Se nunca escreveste nenhum, aqui ficam alguns recursos:
Fornecemos um exemplo de teste de propriedade QuickCheck no ficheiro de testes.
Exemplos de propriedades que podem ser testadas:
value (x, y) >= 10 para todos os (x, y) em que x não é Black
Chamar show a value (x, y) produz a String que se obtém ao aplicar reverse ao resultado de chamar show a value (y, x).
Todas as cores têm nomes únicos. (Para quaisquer duas cores, se as cores forem diferentes, os nomes também são.)
Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.