Percursos
/
Lean
Lean
/
Exercícios
/
Trio de cores de resistência
Trio de cores de resistência

Trio de cores de resistência

Médio

Instruções

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

  • Cada resistência tem um valor de resistência.

  • As resistências são pequenas, tão pequenas que, se imprimisses nelas o valor da resistência, seria difícil de ler. Para contornar este problema, os fabricantes imprimem nas resistências faixas com códigos de cor que indicam os seus valores de resistência.

  • Cada faixa funciona como um algarismo de um número. Por exemplo, se imprimissem uma faixa brown (valor 1) seguida de uma faixa green (valor 5), isso corresponderia ao número 15. Neste exercício, vais criar um programa útil para não teres de memorizar os valores das faixas. O programa recebe 3 cores como parâmetros de entrada e devolve o valor correto, em ohms. As faixas de cor 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

Em Duo de Cores de Resistência, descodificaste as duas primeiras cores. Por exemplo: orange-orange deu o valor principal 33. A terceira cor indica quantos zeros é preciso acrescentar ao valor principal. O valor principal mais os zeros dá-nos um valor em ohms. Para este exercício, não interessa o que os ohms são na realidade. Por exemplo:

  • orange-orange-black seria 33 e nenhum zero, o que dá 33 ohms.
  • orange-orange-red seria 33 e 2 zeros, o que dá 3300 ohms.
  • orange-orange-orange seria 33 e 3 zeros, o que dá 33000 ohms.

(Se a matemática é a tua praia, podes pensar nos zeros como expoentes de 10. Se a matemática não é a tua praia, fica com os zeros. É exatamente a mesma coisa, só dita em linguagem simples em vez de jargão matemático.)

Este exercício consiste em traduzir as cores para um rótulo:

"... ohms"

Assim, uma chamada com os valores de entrada "orange", "orange", "black" deve devolver:

"33 ohms"

Quando chegamos a resistências maiores, usa-se um prefixo métrico para indicar uma magnitude maior de ohms, como "kiloohms". É semelhante a dizer "2 quilómetros" em vez de "2000 metros", ou "2 quilogramas" para "2000 gramas".

Por exemplo, uma chamada com os valores de entrada "orange", "orange", "orange" deve devolver:

"33 kiloohms"

Definir sintaxe

Caution

Este exercício pretende ser uma continuação do Resistor Color Duo e assenta nele. Embora possas resolver os exercícios de prática por qualquer ordem, recomendamos que sigas a sequência sugerida.

Neste exercício, recebes a sintaxe das cores já predefinidas através do prefixo c*, por exemplo, c*black. De seguida, tens de definir sintaxe que associe uma sequência de cores a um valor de resistência com a respetiva unidade SI, possivelmente com um prefixo métrico, de acordo com as instruções. As cores ficam dentro de *[[ e ]] e são separadas por , , por exemplo, *[[c*black, c*yellow, c*violet]].

Esta tarefa vai provavelmente obrigar-te a usar notações ou macros. Pode valer a pena consultar uma referência.

Como a nova sintaxe é expandida em tempo de compilação, qualquer teste falharia a compilação a menos que toda a sintaxe necessária esteja definida. Por este motivo, em vez de recorrermos aos tradicionais testes em tempo de execução, usamos #guard_msgs. Este comando compara um determinado docstring com uma mensagem gerada por outro comando, neste caso #eval, e reporta um erro se forem diferentes. Podes considerar a ausência de erro como um teste que passou.

Se trabalhares localmente ou no playground online do Lean, recebes feedback imediato sobre qualquer erro reportado pelo #guard_msgs através do Lean InfoView.

Note

O valor da resistência deve ser apresentado com a unidade Ω (ohm). Podes gerar este caráter Unicode localmente ou no playground online do Lean com o atalho \ohm. Se estiveres a trabalhar no editor online do Exercism, podes copiar à vontade o caráter a partir das instruções.

Caution

De momento, o executor de testes online não suporta a importação da biblioteca completa de metaprogramação do Lean. Embora possas usar livremente qualquer funcionalidade disponível no Lean por predefinição, incluindo as do namespace Lean, adicionar import Lean ou importar módulos específicos do namespace Lean fará com que a tua submissão falhe quando a enviares para o Exercism.

Tem em atenção que não é necessário importar a biblioteca do Lean para resolver este exercício.

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

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

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