Você trabalha em uma empresa de bioengenharia especializada no desenvolvimento de soluções terapêuticas.
Sua equipe acaba de receber um novo projeto: desenvolver uma terapia direcionada para um tipo raro de câncer.
É tudo muito complicado, mas a ideia básica é que, às vezes, o corpo das pessoas produz proteína demais de um determinado tipo. Isso pode causar todo tipo de problema.
Mas se você conseguir criar uma molécula bem específica (chamada de micro-RNA), ela pode impedir que essa proteína seja produzida.
Essa técnica se chama Interferência de RNA.
Sua tarefa é determinar o complemento de RNA de uma sequência de DNA.
Tanto as fitas de DNA quanto as de RNA são uma sequência de nucleotídeos.
Os quatro nucleotídeos encontrados no DNA são adenina (A), citosina (C), guanina (G) e timina (T).
Os quatro nucleotídeos encontrados no RNA são adenina (A), citosina (C), guanina (G) e uracila (U).
Dada uma fita de DNA, sua fita de RNA transcrita é formada substituindo cada nucleotídeo pelo seu complemento:
G -> C
C -> G
T -> A
A -> U
Se você quiser ver como as entradas e as saídas são estruturadas, dê uma olhada nos exemplos do conjunto de testes.
Ao usar campos privados em structs com funções new públicas que retornam Option ou Result (como aqui com DNA::new e RNA::new), podemos garantir que a representação interna de DNA está correta. Como toda string de DNA válida tem uma string de RNA válida, não precisamos retornar um Result/Option de into_rna.
Isso explica as assinaturas de tipo que você vai ver nos testes.
Os tipos de retorno de DNA::new() e RNA::new() são Result<Self, usize>, em que o tipo de erro usize representa o índice do primeiro caractere inválido (índice de char, não utf8).
Crie sua conta no Exercism para aprender e dominar Rust com 99 exercícios e mentoria humana de verdade, tudo de graça.