شما برای یک شرکت مهندسی زیستی کار میکنید که در توسعهی راهحلهای درمانی تخصص دارد.
تیم شما همین حالا پروژهی جدیدی گرفته است: توسعهی یک درمان هدفمند برای نوع نادری از سرطان.
همهچیز خیلی پیچیده است، اما ایدهی اصلی این است که گاهی بدن افراد مقدار زیادی از یک پروتئین مشخص تولید میکند. این میتواند خرابیهای زیادی به بار آورد.
اما اگر بتوانید یک مولکول بسیار خاص بسازید (به اسم micro-RNA)، میتواند جلوی تولید آن پروتئین را بگیرد.
به این تکنیک RNA Interference میگویند.
وظیفهی شما این است که مکمل RNA یک توالی DNA دادهشده را مشخص کنید.
هم رشتهی DNA و هم رشتهی RNA دنبالهای از نوکلئوتیدها هستند.
چهار نوکلئوتیدی که در DNA یافت میشوند عبارتاند از آدنین (A)، سیتوزین (C)، گوانین (G) و تیمین (T).
چهار نوکلئوتیدی که در RNA یافت میشوند عبارتاند از آدنین (A)، سیتوزین (C)، گوانین (G) و اوراسیل (U).
رشتهی DNA را در نظر بگیرید؛ رشتهی RNA رونویسیشدهی آن با جایگزینکردن هر نوکلئوتید با مکملش ساخته میشود:
G -> C
C -> G
T -> A
A -> U
اگر میخواهید ببینید ساختار ورودیها و خروجیها چگونه است، نگاهی به مثالهای مجموعهی تست بیندازید.
با استفاده از فیلدهای خصوصی در ساختارها بههمراه توابع عمومی new که Option یا Result برمیگردانند (همانطور که اینجا در DNA::new و RNA::new چنین است)، میتوانیم تضمین کنیم که نمایش داخلی DNA درست است. چون هر رشتهی معتبر DNA یک رشتهی معتبر RNA دارد، نیازی نیست از into_rna مقدار Result/Option برگردانیم.
همین موضوع، امضاهای نوعی را که در تستها میبینید توضیح میدهد.
نوع بازگشتی هر دو DNA::new() و RNA::new() برابر Result<Self, usize> است؛ در اینجا نوع خطای usize نشاندهندهی اندیس اولین کاراکتر نامعتبر است (اندیس کاراکتر، نه utf8).