hello-world 연습 문제를 구현했다면, 다음으로 할 일은 다른 연습 문제 20개 이상을 구현하는 거예요.
구현할 수 있는 연습 문제에는 두 가지 유형이 있어요.
일반적으로 새 트랙은 실습 문제부터 구현하는 걸 권장해요. 구현하기도 더 쉽고 처음부터 고민할 것도 적기 때문이에요. 개념 연습 문제는 트랙이 제대로 돌아가기 시작한 뒤에 언제든 추가할 수 있어요.
트랙에서 실습 문제를 구현할 수 있도록 exercism/problem-specifications 저장소를 만들었어요. 이 저장소에는 100개가 넘는 실습 문제의 메타데이터가 들어 있어서, 각 트랙은 이를 바탕으로 자기 트랙에 맞는 버전의 연습 문제를 구현할 수 있어요. 그래서 여러 트랙에서 같은 연습 문제가 구현되어 있는 걸 볼 수 있어요.
그러면 이 100개가 넘는 연습 문제 목록에서 20개 이상을 어떻게 고를까요? 몇 가지 지침을 알려드릴게요.
100개가 넘는 연습 문제에는 아주 다양한 개념이 쓰여요. 학생들이 다양한 개념을 연습할 수 있는 연습 문제를 구현하는 게 좋아요. 문자열만 다루는 연습 문제를 20개 구현하기보다는, 서로 다른 개념을 다루는 연습 문제를 구현해 봐요.
몇 가지 개념과 예시 연습 문제를 살펴봐요.
| 개념 | 연습 문제 |
|---|---|
| 비트 조작 | allergies, secret-handshake |
| 불리언 | leap |
| 클래스 | circular-buffer, robot-name |
| 동시성 | bank-account |
| 조건문 | raindrops |
| 날짜와 시간 | gigasecond, meetup |
| 동등성 | clock |
| 실수 | darts, space-age |
| 지연 평가 | alphametics, zebra-puzzle |
| 배열 | resistor-color, spiral-matrix |
| 루프 | collatz-conjecture, protein-translation |
| 딕셔너리 | nucleotide-count |
| 숫자 | leap, grains |
| 무작위성 | dnd-character, robot-name |
| 문자열 | bob, isogram, |
| 트리 | binary-search-tree, pov |
어떤 연습 문제는 다른 것보다 구현하기 더 어려워요. 쉬운 것, 중간 정도인 것, 어려운 것을 고루 섞어서 다양한 난이도의 연습 문제를 구현해 봐요.
연습 문제의 난이도는 관련된 개념이나 트랙의 언어 등 여러 요인에 따라 달라져요. 이미 그 연습 문제를 구현한 다른 트랙에서 어떻게 되어 있는지 확인해 보면, 구현이 어떤 모습일지 감을 잡는 데 도움이 돼요.
몇 가지 난이도와 연습 문제를 살펴봐요.
| 난이도 | 연습 문제 |
|---|---|
| 쉬움 | darts, gigasecond, isogram, leap, resistor-color, space-age |
| 중급 | allergies, bob, meetup, protein-translation, raindrops, secret-handshake |
| 어려움 | alphametics, forth, react, pov, zebra-puzzle, zipper |
모든 연습 문제가 여러분의 트랙에 맞는 건 아니에요. 트랙에 맞는 연습 문제만 골라야 해요. 말이 안 되는 연습 문제를 구현하느니 아예 구현하지 않는 게 나아요. 예를 들어, lens-person 연습 문제는 학생이 렌즈 를 다루는데, 많은 언어가 이를 지원하지 않아요.
트랙에 맞지 않는 연습 문제를 발견했다면, 그 슬러그를 트랙 config.json 파일의 exercises.foregone 배열에 추가하면 돼요.
그러면 도구가 해당 연습 문제를 무시해요.
좀 더 구체적으로 알아보기 위해, 첫 연습 문제를 이렇게 골라볼 수 있어요.
| 연습 문제 | 난이도 | 개념 |
|---|---|---|
| hello-world | 쉬움 | 없음 (첫 연습 문제) |
| leap | 쉬움 | 숫자, 불리언 |
| gigasecond | 쉬움 | 날짜와 시간 |
| isogram | 쉬움 | 문자열 |
| resistor-color | 쉬움 | 배열 |
| nucleotide-count | 쉬움 | 딕셔너리 |
| collatz-conjecture | 쉬움 | 루프 |
| darts | 쉬움 | 실수 |
| two-fer | 쉬움 | 문자열 서식, 선택적 인자 |
| high-scores | 쉬움 | 컬렉션 처리 |
| raindrops | 중급 | 조건문 |
| bob | 중급 | 문자열 |
| allergies | 중급 | 비트 조작 |
| series | 중급 | 예외 |
| circular-buffer | 중급 | 클래스 |
| meetup | 중급 | 날짜와 시간 |
| yacht | 중급 | 배열 |
| dominoes | 어려움 | 튜플, 지연 평가 |
| diamond | 어려움 | 문자열 서식 |
| alphametics | 어려움 | 지연 평가 |
| forth | 어려움 | 파싱 |
트랙에 포함할 연습 문제를 골랐다면, 다음 단계는 그 연습 문제를 구현하는 거예요. 실습 문제 추가 문서에 실습 문제를 추가하는 방법이 자세히 나와 있어요.