Is this an efficient version of RNA Transcription in C?
Here’s the program:
rna_transcription.c
<span style="font-weight:bold;color:#a71d5d;">#include </span><span style="color:#183691;">"rna_transcription.h"
</span><span style="font-weight:bold;color:#a71d5d;">#include </span><span style="color:#183691;"><malloc.h>
</span><span style="font-weight:bold;color:#a71d5d;">#include </span><span style="color:#183691;"><string.h>
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">static const char</span><span style="color:#323232;"> lookup[] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">{
</span><span style="color:#323232;"> [</span><span style="color:#183691;">'A'</span><span style="color:#323232;">] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">'U'</span><span style="color:#323232;">,
</span><span style="color:#323232;"> [</span><span style="color:#183691;">'C'</span><span style="color:#323232;">] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">'G'</span><span style="color:#323232;">,
</span><span style="color:#323232;"> [</span><span style="color:#183691;">'G'</span><span style="color:#323232;">] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">'C'</span><span style="color:#323232;">,
</span><span style="color:#323232;"> [</span><span style="color:#183691;">'T'</span><span style="color:#323232;">] </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#183691;">'A'
</span><span style="color:#323232;">};
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">char *</span><span style="font-weight:bold;color:#795da3;">to_rna</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">const char *</span><span style="color:#323232;">dna)
</span><span style="color:#323232;">{
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">!</span><span style="color:#323232;">dna)
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">return </span><span style="color:#0086b3;">NULL</span><span style="color:#323232;">;
</span><span style="color:#323232;">
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">char *</span><span style="color:#323232;">rna </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#62a35c;">calloc</span><span style="color:#323232;">(</span><span style="color:#62a35c;">strlen</span><span style="color:#323232;">(dna) </span><span style="font-weight:bold;color:#a71d5d;">+ </span><span style="color:#0086b3;">1</span><span style="color:#323232;">, </span><span style="color:#0086b3;">1</span><span style="color:#323232;">), </span><span style="font-weight:bold;color:#a71d5d;">*</span><span style="color:#323232;">start_rna </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> rna;
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">(rna)
</span><span style="color:#323232;"> {
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">for </span><span style="color:#323232;">(; </span><span style="font-weight:bold;color:#a71d5d;">*</span><span style="color:#323232;">dna; dna</span><span style="font-weight:bold;color:#a71d5d;">++</span><span style="color:#323232;">, rna</span><span style="font-weight:bold;color:#a71d5d;">++</span><span style="color:#323232;">)
</span><span style="color:#323232;"> {
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">!</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">*</span><span style="color:#323232;">rna </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> lookup[(</span><span style="font-weight:bold;color:#a71d5d;">int</span><span style="color:#323232;">)</span><span style="font-weight:bold;color:#a71d5d;">*</span><span style="color:#323232;">dna]))
</span><span style="color:#323232;"> {
</span><span style="color:#323232;"> </span><span style="color:#62a35c;">free</span><span style="color:#323232;">(rna);
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">return </span><span style="color:#0086b3;">NULL</span><span style="color:#323232;">;
</span><span style="color:#323232;"> }
</span><span style="color:#323232;"> }
</span><span style="color:#323232;"> }
</span><span style="color:#323232;"> </span><span style="font-weight:bold;color:#a71d5d;">return</span><span style="color:#323232;"> start_rna;
</span><span style="color:#323232;">}
</span>
rna_transcription.h
<span style="font-weight:bold;color:#a71d5d;">#ifndef</span><span style="color:#323232;"> RNA_TRANSCRIPTION_H
</span><span style="font-weight:bold;color:#a71d5d;">#define </span><span style="color:#323232;">RNA_TRANSCRIPTION_H
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">char *</span><span style="font-weight:bold;color:#795da3;">to_rna</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">const char *</span><span style="color:#323232;">dna);
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">#endif
</span>
I can’t help but wonder how much of a waste of space the array would be. Surely, using a map is better, right?
Add comment