트랙
/
Lean
Lean
/
연습 문제
/
저항 색상 트리오
저항 색상 트리오

저항 색상 트리오

보통

지침

Raspberry Pi로 무언가를 만들고 싶다면 아마 _저항기_를 사용하게 될 거예요. 이 연습 문제에서는 저항기에 대해 세 가지만 알면 돼요:

  • 각 저항기에는 저항값이 있어요.

  • 저항기는 아주 작아요. 너무 작아서 저항값을 저항기 위에 인쇄한다 해도 읽기가 어려울 정도예요. 이 문제를 해결하려고 제조사들은 저항기 위에 색으로 구분된 띠를 인쇄해서 저항값을 나타내요.

  • 각 띠는 숫자의 한 자릿수 역할을 해요. 예를 들어 brown 띠(값 1)를 인쇄하고 그다음에 green 띠(값 5)를 인쇄하면 숫자 15가 돼요. 이 연습 문제에서는 띠의 값들을 외우지 않아도 되도록 도와주는 프로그램을 만들어 봐요. 프로그램은 색 3개를 입력으로 받아서 올바른 값을 ohms 단위로 출력해요. 색 띠는 다음과 같이 인코딩되어 있어요:

  • black: 0

  • brown: 1

  • red: 2

  • orange: 3

  • yellow: 4

  • green: 5

  • blue: 6

  • violet: 7

  • grey: 8

  • white: 9

Resistor Color Duo에서는 처음 두 색을 해독했어요. 예를 들어 orange-orange는 기본값 33이 됐죠. 세 번째 색은 기본값에 0을 몇 개 붙여야 하는지를 나타내요. 기본값에 0을 붙이면 ohms 단위의 값이 돼요. 이 연습 문제에서는 ohms가 실제로 무엇인지는 중요하지 않아요. 예를 들어:

  • orange-orange-black은 33에 0이 하나도 없어서 33 ohms가 돼요.
  • orange-orange-red는 33에 0이 2개 붙어서 3300 ohms가 돼요.
  • orange-orange-orange는 33에 0이 3개 붙어서 33000 ohms가 돼요.

(수학이 잘 맞는 편이라면 0을 10의 거듭제곱으로 생각해 봐도 좋아요. 수학이 잘 맞지 않는다면 그냥 0으로 생각해요. 사실 같은 얘기예요, 수학 용어 대신 쉬운 말로 표현했을 뿐이니까요.)

이 연습 문제는 색을 레이블로 바꾸는 것에 관한 거예요:

"... ohms"

따라서 "orange", "orange", "black"을 입력하면 다음을 반환해야 해요:

"33 ohms"

저항기가 더 커지면 "kiloohms"처럼 더 큰 ohms 크기를 나타내기 위해 미터법 접두사를 사용해요. 이건 "2000미터" 대신 "2킬로미터"라고 말하거나, "2000그램" 대신 "2킬로그램"이라고 말하는 것과 비슷해요.

예를 들어 "orange", "orange", "orange"을 입력하면 다음을 반환해야 해요:

"33 kiloohms"

문법 정의하기

Caution

이 연습 문제는 Resistor Color Duo의 후속 문제로, 그 내용을 이어서 다뤄요. 연습 문제는 어떤 순서로 풀어도 괜찮지만, 안내된 순서를 따라가길 권해요.

이 연습 문제에서는 c* 접두사로 이미 정의된 색깔 문법이 주어져요. 예를 들어 c*black 같은 식이죠. 그다음 지침에 따라, 색깔의 나열을 SI 단위와 함께 (경우에 따라 미터법 접두사까지 붙은) 저항값에 연결하는 문법을 정의해야 해요. 색깔들은 *[[와 ]] 안에 있고 , 로 구분돼요. 예를 들어 *[[c*black, c*yellow, c*violet]]처럼요.

이 과제는 아마 표기법이나 매크로를 사용해야 할 거예요. 참고 자료를 한번 확인해 봐요.

새 문법은 컴파일 시점에 확장되기 때문에, 필요한 문법이 모두 정의되지 않으면 어떤 테스트도 컴파일되지 않아요. 그래서 전통적인 런타임 테스트에 기대는 대신 #guard_msgs를 사용해요. 이 명령은 주어진 docstring과 다른 명령, 여기서는 #eval이 생성한 메시지를 비교하고, 둘이 다르면 오류를 보고해요. 오류가 없다는 것은 곧 테스트를 통과했다고 봐도 된다는 뜻이에요.

로컬에서 작업하거나 Lean의 온라인 플레이그라운드에서 작업하면, #guard_msgs가 보고하는 오류를 Lean InfoView를 통해 즉시 확인할 수 있어요.

Note

저항값은 Ω(옴) 단위로 출력해야 해요. 이 유니코드 문자는 로컬이나 Lean 온라인 플레이그라운드에서 \ohm 단축키로 입력할 수 있어요. Exercism 온라인 에디터에서 작업한다면 지침에서 이 문자를 복사해도 좋아요.

Caution

온라인 테스트 러너는 현재 Lean 메타프로그래밍 라이브러리 전체를 임포트하는 것을 지원하지 않아요. Lean에서 기본적으로 사용할 수 있는 기능은 무엇이든, Lean 네임스페이스 안에 있는 것들을 포함해서, 자유롭게 써도 되지만, import Lean을 추가하거나 Lean 네임스페이스에서 특정 모듈을 임포트하면 Exercism에 제출했을 때 실패해요.

이 연습 문제를 푸는 데 Lean 라이브러리를 임포트할 필요는 없다는 점을 기억해 두세요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Lean Exercism

저항 색상 트리오 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Lean 트랙을 연습 문제 100개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.