Percursos
/
Haskell
Haskell
/
Exercícios
/
Duo de cores de resistência
Duo de cores de resistência

Duo de cores de resistência

Fácil

Instruções

Se queres construir algo com um Raspberry Pi, provavelmente vais usar resistências. Para este exercício, precisas de saber duas coisas sobre elas:

  • Cada resistência tem um valor.
  • As resistências são pequenas, tão pequenas que, se imprimisses o valor da resistência nelas, seria difícil de ler.

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:

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

A partir do exemplo acima: brown-green deve devolver 15, e brown-green-violet deve devolver 15 também, ignorando a terceira cor.

Dicas

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:

  1. School of Haskell.
  2. Real world Haskell

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

Editar via GitHub A ligação abre numa nova janela ou separador
Haskell Exercism

Estás pronto para começar Duo de cores de resistência?

Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.