Raspberry Pi로 무언가를 만들어 보고 싶다면, 아마 _저항_을 사용하게 될 거예요. 이 연습 문제에서는 저항에 대해 두 가지를 알아야 해요:
이 문제를 해결하려고 제조사들은 저항값을 나타내기 위해 저항 위에 색으로 구분한 띠를 인쇄해요. 각 띠에는 위치와 숫자 값이 있어요.
저항의 처음 두 띠는 단순한 인코딩 규칙을 따라요. 각 색은 하나의 숫자에 대응해요. 예를 들어 brown 띠(값 1) 다음에 green 띠(값 5)를 인쇄하면 숫자 15가 돼요.
이 연습 문제에서는 띠의 값을 외우지 않아도 되도록 도움이 되는 프로그램을 만들어 봐요. 이 프로그램은 색 이름을 입력으로 받아 두 자리 숫자를 출력해요. 입력으로 색이 두 개를 넘게 들어와도 마찬가지예요!
각 띠의 색은 다음과 같이 인코딩돼요:
위의 예에서처럼 brown-green은 15를 반환해야 하고, brown-green-violet도 세 번째 색을 무시하고 15를 반환해야 해요.
다음 함수를 구현해야 해요.
value :: (Color, Color) -> Int
이 함수는 색 두 개만 받아서 저항기의 저항값에 해당하는 숫자를 만들어요.
보너스 - 속성 테스트:
이 연습 문제는 속성 테스트를 작성해 볼 좋은 기회예요. 이전에 한 번도 작성해 본 적이 없다면 다음 자료를 참고해 봐요:
테스트 파일에 QuickCheck 속성 테스트 예시를 하나 넣어 두었어요.
테스트할 수 있는 속성의 예는 다음과 같아요:
x가 Black이 아닌 모든 (x, y)에 대해 value (x, y) >= 10
value (x, y)에 show를 호출한 결과는 value (y, x)에 show를 호출한 결과를 reverse한 문자열과 같아요.
모든 색은 이름이 서로 달라요. (두 색이 서로 다르면 이름도 서로 달라요.)
Exercism에 가입하고 Haskell 트랙을 연습 문제 107개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.