어느 저녁, 누군가 어떤 아이디어를 집요하게 좇고 있었던 것처럼, 알쏭달쏭한 낙서로 가득한 낡은 공책을 우연히 발견했어요. 한 페이지에는 질문 하나가 눈에 띄었어요: 모든 수는 1까지 갈 수 있을까? 그것은 콜라츠 추측이라는 것과 연결되어 있었어요. 수십 년째 수많은 사람을 골머리 앓게 한 수수께끼였죠.
규칙은 보기보다 단순했어요. 아무 양의 정수나 하나 골라요.
그런 다음, 그 결과로 이 단계들을 끝없이 반복해요.
궁금해진 나머지, 시험 삼아 12를 골라 여정을 시작했어요:
12 ➜ 6 ➜ 3 ➜ 10 ➜ 5 ➜ 16 ➜ 8 ➜ 4 ➜ 2 ➜ 1
두 번째 수(6)부터 세면 1에 도달하기까지 9단계가 걸렸고, 규칙이 반복될 때마다 수는 계속 바뀌었어요. 처음에는 수열이 예측할 수 없어 보였어요. 위로, 아래로, 사방으로 마구 튀는 것처럼요. 그런데도 이 추측은 시작하는 수가 무엇이든 항상 1에서 끝난다고 말해요.
흥미롭기도 했지만, 동시에 알쏭달쏭했어요. 왜 이게 항상 통하는 걸까요? 이 과정이 무너져서 영원히 반복되거나 무한으로 빠져나가는 수가 있을까요? 공책은 이걸 풀어내면 뭔가 심오한 것을 밝혀낼 수 있다고 암시했어요. 그리고 그와 함께 명성과 재산, 역사에 남을 자리가 그 비밀을 풀어내는 사람을 기다리고 있죠.
양의 정수가 주어지면, 콜라츠 추측의 규칙에 따라 1에 도달할 때까지 걸리는 단계 수를 반환해요.
이 연습 문제에서는 IllegalArgument 오류를 포함하는 오류 집합 ComputationError를 추가해야 해요.
이걸 꼭 public으로 만들어야 한다는 점을 잊지 마세요!
steps 함수는 입력이 0일 때 ComputationError.IllegalArgument를 반환해야 해요.
뒤에 나오는 연습 문제들은 보통 이렇게 명시적인 지침을 생략해요. 일반적으로 Exercism은 풀이를 구현할 때 테스트 파일을 읽어 보기를 기대해요.
Zig의 오류에 대해 더 자세히 알고 싶다면 다음을 참고해 봐요:
Exercism에 가입하고 Zig 트랙을 연습 문제 104개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.