ITI0011-2015:harjutus 03

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti

Harjutuse tähtaeg on 5. praktikum (17.-18. veebruar).

Üldine informatsioon harjutuste kohta: ITI0011:harjutused.

Kirjeldus

Selles harjutuses tegelete tekstitöötlusega. Täpsemalt on teil vaja valideerida DNA ahel ning teha lihtsamat operatsioonid sellega.

Kirjutada 4 funktsiooni:

  • etteantud sõne puhul leiab, kas see on korrektne DNA järjestus (koosneb vaid sümbolitest A, C, G, T)
  • etteantud sõne puhul leiab kõige rohkem esineva sümboli esinemiste arvu
  • etteantud sõne puhul teisendab DNA ahela RNA ahelaks, teisendused: A -> U, G -> C, C -> G, T -> A
  • etteantud sõne puhul teisendab DNA ahela proteiini ahelaks.

Allpool on igat funktsiooni täpsemalt kirjeldatud. Kõige lõpus leiate malli, mida kasutada.

Lugemist

Java:Sõne, Java:Tsüklid

DNA järjestuse valideerimine

DNA http://et.wikipedia.org/wiki/DNA ahel on esitatud nukleotiidide järjestusena. Nukleotiid on esitatud ühe sümboliga, kas A, C, G või T, muid sümboleid korrektses ahelas ei esine. Esimese funktsiooni eesmärk on valideerida etteantud järjestust. Järjestus antakse teile ette sõnena (ik string). Funktsioon peab kontrollima, kas sisendiks saadud argument (sõne) on korrektne ehk siis temas sisalduvad vaid lubatud nukleotiidid.

Näiteks: <source lang="java"> isValidDnaSequence(null) → false isValidDnaSequence("AAAACCGTAC") → true isValidDnaSequence("") → true isValidDnaSequence("GKS") → false isValidDnaSequence("a") → false </source>

Kõige rohkem esineva nukleotiidi kogus

Etteantud DNA-ahelast tuleb leida kõige rohkem esineva nukleotiidi kogus. Kui etteantud sõne ei ola korrektne DNA-ahel, tagastab funktsioon -1.

<source lang="java"> highestOccurrence(null) → -1 highestOccurrence("ACAACCGTGCGC") → 5 </source> Viimase näite puhul nukleotiidide esinemised: A 3 tk, C 5 tk, G 3 tk, T 1 tk.

Transkriptsioon (DNA -> RNA)

Transkriptsiooni http://et.wikipedia.org/wiki/Transkriptsioon_%28geneetika%29 tulemusena saadakse DNA-st RNA. Etteantud DNA-ahel tuleb transkribeerida RNA-ahelaks. Selle tarvis on vaja teha sellised asendused:

  • A -> U (DNA-ahelas oleva A nukleotiidi asemel tekib väljastatavasse sõnesse U nukleotiid)
  • G -> C
  • C -> G
  • T -> A

Kui etteantud järjestus ei ole korrektne DNA-ahel, tagastab funktsioon null'i: return null;.

<source lang="java"> transcribe("AAGGCCTT") → "UUCCGGAA" transcribe("TATA") → "AUAU" transcribe("klj") → null </source>

Translatsioon (DNA -> RNA -> proteiin)

Translatsiooni tulemusena tõlgitakse RNA ahel valgu (aminohapete) järjestuseks. Ette antakse DNA ahel, millest tuleb transkribeerida RNA. RNA omakorda tuleb transleerida proteiinide ahelaks. Tegelikult on kogu see protsess keerulisem. Meie vaatame lihtsustatud olukorda, kus tõlgime vaid valku kodeeriva osa (ehk siis start- ehk metioniini kodeeriv koodon meid antud hetkel ei huvita).

Proteiine transleeritakse koodoni kaupa. Koodon on kolmekohaline osa RNA-ahelast. Ehk siis iga kolme sümboli kohta RNA-ahelas tekib üks proteiini aminohappejääk. Vastavustabel on siin: http://en.wikipedia.org/wiki/Genetic_code#RNA_codon_table või http://rosalind.info/glossary/rna-codon-table/ . Kui tekkinud RNA-ahela pikkus ei jagu täpselt kolmikuteks, tagastab funktsioon null.

Tabelis on iga kolmiku kohta mingi uus sümbol või Stop. Stop tähendab seda, et selle kohapeal lõpetatakse translatsiooniprotsess ära. Ehk siis kui funktsioon jõuab kolmikuni, mis tõlgendub stopiks, jäetakse translatsioon pooleli ja tagastatakse seni saadud tulemus (kuigi RNA-ahel ise võib pikem olla). Muul juhul lõppeb translatsioon edukalt, kui jõutakse täpselt RNA lõppu. Kui mõni element jääb üle (või puudu) täieliku koodoni transleerimisest, tuleb kogu tulemuse puhul tagastada null.

<source lang="java"> translateProtein("TTTAAAGGGCCC") → "KFPG" </source>

"TTTAAAGGGCCC" on DNA-ahel, see teisendatakse RNA-ahelaks: "AAAUUUCCCGGG". Selle teisendamine kolmikute kaupa annab "KFPG".

<source lang="java"> translateProtein("TTTACTGGGCCC") → "K" </source>

"TTTACTGGGCCC" on DNA-ahel, see teisendatakse RNA-ahelaks: "AAAUGACCCGGG". Selles ahelas teine kolmik on UGA, mis viitab stopp-koodonile. Seega tagastatakse tulemus, mis saadakse kuni selle kolmikuni transleerimisel: K.

Kui sisendis olev DNA-ahel ei ole korrektne või saadud RNA-d ei saa transleerida, tagastab funktsioon null.

<source lang="java"> translateProtein("TTTAAAGGGCCCx") → null </source>

Mall

<source lang="java"> /**

* Home assignment 03.
* 
* Read more: https://courses.cs.ttu.ee/pages/ITI0011:harjutus_03
*/

public class Task03 {

/** * Given a string, check whether it represents a valid * DNA sequence, e.g. it contains only A, C, G, T characters. * @param sequence Possible DNA sequence. * @return Whether the given sequence is a valid DNA sequence. */ public static boolean isValidDnaSequence(String sequence) { return true; }

/** * Given a string, find what is the highest * occurrence of one nucleotide base (A, C, G, or T). * @param dnaSequence Possible DNA sequence. * @return The number representing how many times the most * frequent nucleotide base occurs in the string. In case * the input sequence is not a valid DNA sequence, returns -1. */ public static int highestOccurrence(String dnaSequence) { return 0; }

/** * Given a possible DNA string, transcribe it to RNA. * In the transcription process, you have to do the * following substitutions: * A -> U, G -> C, C -> G, T -> A * @param dnaSequence Possible DNA sequence. * @return Transcribed RNA. In case the input sequence * is not a valid DNA sequence, returns null. */ public static String transcribe(String dnaSequence) { return ""; }

/** * Given a possible DNA string, transcribe it to RNA * and then translate RNA to protein sequence. * In case of Stop codon (there are three), the translation * process is ended and the sequence translated up the the * stop codon is returned. * @see http://rosalind.info/glossary/rna-codon-table/ * @param dnaSequence Possible DNA sequence. * @return Translated protein sequence. In case the input * sequence is not a valid DNA sequence or transcribed * RNA does not fully translate into protein, returns null. */ public static String translateProtein(String dnaSequence) { return ""; }

/** * The main method, which is the entry point of the program. * !!IMPORTANT!! You have to keep the main method in order * to get your solution tested. * @param args Arguments from the command line */ public static void main(String[] args) { System.out.println(isValidDnaSequence("ACTGT")); // => true System.out.println(highestOccurrence("AACT")); // => 2 System.out.println(transcribe("ACAGCT")); // => UGUCGA System.out.println(translateProtein("ACAGCT")); // => CR

}

}

</source>