عصر فضا

عصر فضا

آسان

مقدمه

سال ۲۵۲۵ است و شما تازه سفرتان را به قصد دیدن همه‌ی سیاره‌های منظومه‌ی شمسی آغاز کرده‌اید (عطارد، زهره، زمین، مریخ، مشتری، زحل، اورانوس و نپتون). اولین ایستگاه عطارد است، جایی که گمرک از شما می‌خواهد فرمی پر کنید (ظاهراً بوروکراسی مخصوص زمین نیست). وقتی فرم را به مأمور گمرک تحویل می‌دهید، آن را با دقت برانداز می‌کند و اخم می‌کند. «آیا واقعاً انتظار دارید باور کنم که فقط ۵۰ سالتان است؟ باید نزدیک به ۲۰۰ سال داشته باشید!» با لبخند منتظر می‌مانید که مأمور گمرک شروع به خندیدن کند، اما او کاملاً جدی به نظر می‌رسد. متوجه می‌شوید که سنتان را بر حسب سال‌های زمینی وارد کرده‌اید، اما مأمور آن را بر حسب سال‌های عطاردی انتظار داشته است! چون مدت گردش عطارد به دور خورشید به‌طور چشمگیری از زمین کوتاه‌تر است، در واقع به سال‌های عطاردی خیلی مسن‌تر هستید. پس از چند محاسبه‌ی سریع، می‌توانید سنتان را بر حسب سال‌های عطاردی اعلام کنید. مأمور گمرک راضی لبخند می‌زند و به شما اجازه می‌دهد رد شوید. در ذهنتان یادداشت می‌کنید که پیش از بازرسی‌های گمرکی آینده، سن مخصوص هر سیاره‌تان را از پیش محاسبه کنید تا از چنین اشتباه‌هایی جلوگیری شود.

Note

اگر برایتان سؤال است که چرا پلوتو در این فهرست جا نگرفت، این ویدیوی یوتیوب را ببینید.

دستورالعمل‌ها

اگر سنی بر حسب ثانیه داده شود، حساب کنید که آن شخص در هر سیاره‌ای از منظومه‌ی شمسی ما چند ساله خواهد بود.

یک سال زمینی برابر است با ۳۶۵٫۲۵ روز زمینی، یا ۳۱٬۵۵۷٬۶۰۰ ثانیه. اگر به شما بگویند سن کسی ۱٬۰۰۰٬۰۰۰٬۰۰۰ ثانیه است، سن او ۳۱٫۶۹ سال زمینی خواهد بود.

برای سیاره‌های دیگر باید دوره‌ی مداری آن‌ها را بر حسب سال زمینی در نظر بگیرید:

سیاره دوره‌ی مداری بر حسب سال زمینی
عطارد 0.2408467
زهره 0.61519726
زمین 1.0
مریخ 1.8808158
مشتری 11.862615
کیوان 29.447498
اورانوس 84.016846
نپتون 164.79132
Note

طول واقعی یک دور کامل گردش زمین به دور خورشید به ۳۶۵٫۲۵۶ روز (یک سال نجومی) نزدیک‌تر است. تقویم میلادی به‌طور میانگین ۳۶۵٫۲۴۲۵ روز دارد. اگرچه این مقدار کاملاً دقیق نیست، در این تمرین از ۳۶۵٫۲۵ استفاده می‌شود. برای آشنایی با روش‌های دیگر اندازه‌گیری سال، سال در ویکی‌پدیا را ببینید.

پیاده‌سازی

در Cairo، که پشتیبانی بومی برای اعداد ممیز شناور ندارد، مقادیر کسری را با اعداد صحیح نمایش می‌دهیم.

این رویکرد در توسعه‌ی بلاک‌چین برای حفظ دقت در محاسبات ضروری است.

در این تمرین، با تبدیل دوره‌های مداری به میکروثانیه، از «حساب ممیز ثابت» استفاده می‌کنیم.

برای مثال، دوره‌ی مداری عطارد که 0.2408467 سال زمینی است، با ضرب در 1,000,000 به 240,846,700 میکروثانیه تبدیل می‌شود.

برای در نظر گرفتن دقت اعشاری، موارد تست فرض می‌کنند که سن حاصل دو رقم اعشار دارد که با اعداد صحیح نمایش داده می‌شود.

یعنی سنی برابر با 31.69 سال در کد به‌صورت 3169 ذخیره می‌شود.

برای رسیدن به این هدف، پیش از انجام تقسیم، در ۱۰۰ ضرب می‌کنیم.

در ادامه یک مثال می‌آید:

let mercury_orbital_period = 240_846_700; // in microseconds
let age_microseconds = age_seconds * 1_000_000;
// multiplying with 100 to retain 2 decimal places
age_microseconds * 100 / mercury_orbital_period

با استفاده از این روش، مطمئن می‌شوید که مقادیر کسری به‌درستی به‌صورت اعداد صحیح نمایش داده می‌شوند و در همان حال دقت لازم دو رقم اعشار حفظ می‌شود، که برای قبولی تست‌ها حیاتی است.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Cairo Exercism

آماده‌اید عصر فضا را شروع کنید؟

در Exercism ثبت‌نام کنید تا Cairo را همراه با 25 مفهوم68 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.