Tu travailles pour une entreprise de bio-ingénierie spécialisée dans le développement de solutions thérapeutiques.
Ton équipe vient de se voir confier un nouveau projet : développer une thérapie ciblée contre un type rare de cancer.
Tout cela est très compliqué, mais l'idée de base est que, parfois, le corps des gens produit trop d'une protéine donnée. Cela peut semer la pagaille en tout genre.
Mais si tu parviens à créer une molécule très spécifique (appelée micro-ARN), elle peut empêcher la production de cette protéine.
Cette technique s'appelle l'interférence par ARN.
Ton objectif est de déterminer le complément ARN d'une séquence d'ADN donnée.
Les brins d'ADN et d'ARN sont tous deux constitués d'une séquence de nucléotides.
Les quatre nucléotides présents dans l'ADN sont l'adénine (A), la cytosine (C), la guanine (G) et la thymine (T).
Les quatre nucléotides présents dans l'ARN sont l'adénine (A), la cytosine (C), la guanine (G) et l'uracile (U).
À partir d'un brin d'ADN, le brin d'ARN transcrit se forme en remplaçant chaque nucléotide par son complément :
G -> C
C -> G
T -> A
A -> U
Si tu veux voir comment les entrées et les sorties sont structurées, jette un œil aux exemples dans la suite de tests.
En utilisant des champs privés dans des structures dotées de fonctions new
publiques qui renvoient Option ou Result (comme ici avec DNA::new et
RNA::new), on peut garantir que la représentation interne de DNA est
correcte. Comme toute chaîne d'ADN valide possède une chaîne d'ARN valide, on
n'a pas besoin de renvoyer un Result/Option depuis into_rna.
C'est ce qui explique les signatures de types que tu verras dans les tests.
Les types de retour de DNA::new() et de RNA::new() sont Result<Self, usize>,
où le type d'erreur usize représente l'indice du premier caractère invalide
(indice de caractère, pas utf8).
Inscris-toi sur Exercism pour apprendre et maîtriser Rust avec 99 exercices, et un vrai mentorat humain, le tout gratuitement.