2525년, 이제 막 태양계의 모든 행성(수성, 금성, 지구, 화성, 목성, 토성, 천왕성, 해왕성)을 둘러보는 여행을 시작했어요. 첫 번째 목적지는 수성인데, 여기 세관에서는 서류를 작성해야 해요(관료주의는 지구만의 것이 아닌가 봐요). 서류를 세관원에게 건네자, 세관원은 서류를 자세히 살펴보더니 얼굴을 찌푸려요. "정말 나이가 50살이라고 믿으라는 거예요? 200살은 되어 보이는데!"
재미있다고 생각하며 세관원이 웃음을 터뜨리기를 기다렸지만, 세관원은 아주 진지해 보여요. 알고 보니 나이는 지구 년 으로 적었는데, 세관원은 수성 년 으로 기대한 거예요! 수성의 태양 주위 공전 주기는 지구보다 훨씬 짧기 때문에, 수성 년으로 따지면 실제로는 훨씬 나이가 많아요. 재빨리 계산한 끝에 수성 년으로 나이를 알려줄 수 있었어요. 세관원은 만족한 듯 웃으며 통과시켜 줘요. 앞으로 이런 착오를 겪지 않으려면 세관 검사 전에 행성별 나이를 미리 계산해 두어야겠다고 마음속에 새겨 둬요.
명왕성이 왜 빠졌는지 궁금하다면, 이 YouTube 영상을 봐요.
나이가 초 단위로 주어지면, 태양계의 행성에서 그 사람이 몇 살이 되는지 계산해요.
지구의 1년은 365.25 지구일, 즉 31,557,600초예요. 누군가의 나이가 1,000,000,000초라고 하면, 그 사람의 나이는 지구 년으로 31.69살이에요.
다른 행성의 경우에는 지구 년으로 나타낸 공전 주기를 고려해야 해요:
| 행성 | 지구 년으로 나타낸 공전 주기 |
|---|---|
| 수성 | 0.2408467 |
| 금성 | 0.61519726 |
| 지구 | 1.0 |
| 화성 | 1.8808158 |
| 목성 | 11.862615 |
| 토성 | 29.447498 |
| 천왕성 | 84.016846 |
| 해왕성 | 164.79132 |
지구가 태양 주위를 한 바퀴 완전히 도는 실제 시간은 365.256일(항성년 1년)에 더 가까워요. 그레고리력은 평균적으로 365.2425일이에요. 완전히 정확하지는 않지만, 이 연습 문제에서는 365.25를 사용해요. 1년을 재는 더 다양한 방법은 위키백과의 년 문서를 참고해요.
이 연습 문제에서는 해당 행성의 1년 길이를 나타내는 사용자 정의 단위를 가진 물리량을 사용해 나이를 반환해야 해요. Arturo에서 quantity는 숫자 값과 그에 딸린 측정 단위로 이루어져 있어요.
length: 10`m
units length ; `m
scalar length ; 10
10`m * 10`m ; 100 m²
Arturo의 내장 `yr 단위는 31556952초로 변환돼요. 따라서 앞서 지침에서 언급한 초를 기준으로 직접 연 단위를 정의해 사용해야 해요.
quantity는 호환되는 다른 단위로 변환할 수 있어요.
convert 1`m `ft ; 1250/381 ft
convert 100`m2 `ft2 ; 156250000/145161 ft²
property `m ; length
property `m2 ; area
convert 1`m `m2 ; conversion error results
부동소수점 숫자의 정밀도 한계 때문에 Arturo는 스칼라를 유리수로 저장하기도 해요.
대신 to 함수를 사용하면 그 값을 근사 부동소수점 숫자로 가져올 수 있어요.
length: convert 1`m `ft ; 1250/381 ft
to :floating length ; 3.280839895013123
Arturo에서는 quantity에 쓸 자신만의 단위를 지정할 수도 있어요.
specify 'nauMile 1.151`mi
property `nauMile length
specify 'lea 3.00579`nauMile
property `lea ; length
depth: 20000`lea
convert depth `km ; 111355.7993425152 km