Lavori per un'azienda di bioingegneria specializzata nello sviluppo di soluzioni terapeutiche.
Al tuo team è appena stato assegnato un nuovo progetto: sviluppare una terapia mirata per un tipo raro di tumore.
È tutto molto complicato, ma l'idea di base è che a volte il corpo delle persone produce troppo di una determinata proteina. Questo può causare ogni sorta di problemi.
Ma se riesci a creare una molecola molto specifica (chiamata micro-RNA), questa può impedire che la proteina venga prodotta.
Questa tecnica si chiama interferenza a RNA.
Il tuo compito è determinare il complemento RNA di una data sequenza di DNA.
Sia i filamenti di DNA che quelli di RNA sono una sequenza di nucleotidi.
I quattro nucleotidi che si trovano nel DNA sono l'adenina (A), la citosina (C), la guanina (G) e la timina (T).
I quattro nucleotidi che si trovano nell'RNA sono l'adenina (A), la citosina (C), la guanina (G) e l'uracile (U).
Data una sequenza di DNA, il suo filamento di RNA trascritto si forma sostituendo ogni nucleotide con il suo complemento:
G -> C
C -> G
T -> A
A -> U
Se vuoi vedere come sono strutturati gli input e gli output, dai un'occhiata agli esempi nella suite di test.
Usando campi privati nelle struct con funzioni new pubbliche che restituiscono Option o Result (come qui con DNA::new e RNA::new), possiamo garantire che la rappresentazione interna di DNA sia corretta. Poiché ogni stringa di DNA valida ha una stringa di RNA valida, non serve restituire un Result/Option da into_rna.
Questo spiega le firme di tipo che vedrai nei test.
I tipi restituiti da DNA::new() e RNA::new() sono entrambi Result<Self, usize>, dove il tipo di errore usize rappresenta l'indice del primo carattere non valido (indice di carattere, non utf8).
Iscriviti a Exercism per imparare e padroneggiare Rust con 99 esercizi e il mentoring di persone reali, tutto gratis.