/* Rosalind problem Transcribing DNA into RNA in Picat. https://rosalind.info/problems/rna/ """ Problem An RNA string is a string formed from the alphabet containing 'A', 'C', 'G', and 'U'. Given a DNA string t corresponding to a coding strand, its transcribed RNA string u is formed by replacing all occurrences of 'T' in t with 'U' in u. Given: A DNA string t having length at most 1000 nt. Return: The transcribed RNA string of t. Sample Dataset GATGGAACTTGACTACGTAAATT Sample Output GAUGGAACUUGACUACGUAAAUU """ This model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import util. import v3_utils. import rosalind_utils. main => go. go ?=> DNA = "GATGGAACTTGACTACGTAAATT", rna1(RNA,DNA,[]), println(rna1=RNA), println(rna2=rna2(DNA)), rna3(DNA,RNA3), println(rna3=RNA3), RNA4 = rna4(DNA), println(rna4=RNA4), nl. go => true. /* - rna1: 0.915s (as first run: about 10s) - rna2: 0.052s (as first run: 0.609s) - rna3: 0.011s (as first run: 0.609s) - rna4: 0.089s (as first run: 0.283s) */ go2 ?=> garbage_collect(300_000), _ = random2(), println(gen_dna), Len = 1_000_000, DNA = new_list(Len), time(dna_gen1(DNA,"",[])), % println(DNA), garbage_collect(300_000), println(rna1), time(rna1(_RNA1,DNA,[])), % println(rna1=RNA1), garbage_collect(300_000), println(rna2), time(_RNA2=rna2(DNA)), % println(rna2=RNA2), garbage_collect(300_000), println(rna3), time(rna3(DNA,_RNA3)), % println(rna3=RNA3), garbage_collect(300_000), println(rna4), time(_RNA4 = rna4(DNA)), % println(rna4=RNA4), % go2, nl. go2 => true. % The Challenge. go3 => DNA = "GGTTGGACGCTGGTTGTGGAATAGCCCAAGCAACGTTTGGTGGCTGCCTATCACCTATTCCTCATGTGCGAACAAAATACGCGTAAGAAGTTATGCCGACGAGATTCTTCTCTAGGCGCAATTATCCGATGGGCGTGAGGAATGAAAAGACATTAGTCGGGACTCACCTTCCTCTATTCCGTTTTAATTTCACCGGACGTCGTAAGTCGGGCTTAGAATGTTTCGCCTGGTACTCGTAAGGCGACGGTTCGTGGTTTACCCATCCCGGCGCTTGAGCAGCAAGGATTAACTCATCTGATGGAGTATTCAACATGTAGAGCTTATACACGCACAACGACTAAATGGCCGCTCATGTACAGGCCATCCAGCCATCGACATCCACATATCCCGCCACCCTGTTTGGCGCTCCGGGCCCCTGGCGAGCAGACTCTGGTTTCGCGGGTGCATCCGACGCGTGTTTTCCGGAGTCTCTACCTACTCGGTATTGCGCTAGCCTGTGGCCGCATGCCAGCATTCTGCGTTCGTCTTTCTTGTCGCTCAGAAGATCCATCTCATCTTCACCCATTAAGCTGCCCTCTCTTTAACCAACCCGAGTAAATTTGGGTATGCGTTATAGGCACGTTTATACGTGCGGCTTCGGTAAGTAAACTTTCTGTGATAGGAGCCTAAAGTCAGTAGAGCCTGAAGATCGGCAAGGCCGGAGGGCCCCTCTGGTTTAGCCAAGCAGAGAGCTTGATCTTGCCACATGGGGTAACCGATGCCGTAGCTGACAGCATAGGAGCTCGGTACTCTACGCATGCTCAGAACGTAGTGGTTATCCTTTGGAGAACAGGGTAATGCACCTACAGCGGCGAATCATACCAAGACTATCTGCCAGTCGCCGCTTGTTGGCTTAACATGCAATCCCCAAGCGAACTGCGTTTTCCAGACACATAATTCCACTAACTACATAA", % rna3(DNA,RNA), rna1(RNA,DNA,[]), println(RNA), nl. go3 => true. rna1([R|Rs]) --> [C], {(C == 'T' -> R = 'U' ; R = C)}, rna1(Rs). rna1([]) --> []. rna2(DNA) = replace(DNA,'T','U'). rna3(DNA,RNA) :- rna3(DNA,[],RNA). rna3([],RNA,RNA). rna3([C|Cs],RNA0,[R|RNA]) :- (C == 'T' -> R = 'U' ; R = C ), rna3(Cs,RNA0,RNA). rna4(DNA) = [R : C in DNA, R = cond(C == 'T', 'U',C)].