Browse Source

added and solved

rna_transcription for go track
master
Blaine Motsinger 1 year ago
parent
commit
5b57c684d0

+ 43
- 0
go/rna-transcription/README.md View File

@@ -0,0 +1,43 @@
# RNA Transcription

Given a DNA strand, return its RNA complement (per RNA transcription).

Both DNA and RNA strands are a sequence of nucleotides.

The four nucleotides found in DNA are adenine (**A**), cytosine (**C**),
guanine (**G**) and thymine (**T**).

The four nucleotides found in RNA are adenine (**A**), cytosine (**C**),
guanine (**G**) and uracil (**U**).

Given a DNA strand, its transcribed RNA strand is formed by replacing
each nucleotide with its complement:

* `G` -> `C`
* `C` -> `G`
* `T` -> `A`
* `A` -> `U`

## Running the tests

To run the tests run the command `go test` from within the exercise directory.

If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
flags:

go test -v --bench . --benchmem

Keep in mind that each reviewer will run benchmarks on a different machine, with
different specs, so the results from these benchmark tests may vary.

## Further information

For more detailed information about the Go track, including how to get help if
you're having trouble, please visit the exercism.io [Go language page](http://exercism.io/languages/go/resources).

## Source

Hyperphysics [http://hyperphysics.phy-astr.gsu.edu/hbase/Organic/transcription.html](http://hyperphysics.phy-astr.gsu.edu/hbase/Organic/transcription.html)

## Submitting Incomplete Solutions
It's possible to submit an incomplete solution so you can see how others have completed the exercise.

+ 30
- 0
go/rna-transcription/cases_test.go View File

@@ -0,0 +1,30 @@
package strand

// Source: exercism/problem-specifications
// Commit: 294c831 rna-transcription: add test for empty sequence (#1266)
// Problem Specifications Version: 1.3.0

var rnaTests = []struct {
description string
input string
expected string
}{
{"Empty RNA sequence",
"", "",
},
{"RNA complement of cytosine is guanine",
"C", "G",
},
{"RNA complement of guanine is cytosine",
"G", "C",
},
{"RNA complement of thymine is adenine",
"T", "A",
},
{"RNA complement of adenine is uracil",
"A", "U",
},
{"RNA complement",
"ACGTGGTCTTAA", "UGCACCAGAAUU",
},
}

+ 43
- 0
go/rna-transcription/rna_transcription.go View File

@@ -0,0 +1,43 @@
// Package strand - exercise for the exercism.io go track
package strand

// ToRNA converts a DNA strand sequence to it's RNA complement (per RNA transcription)
func ToRNA(dna string) string {
members := []rune(dna)

// convert using the following rules
// G -> C
// C -> G
// T -> A
// A -> U

for i := 0; i < len(members); i++ {
switch {
case members[i] == 'G':
members[i] = 'C'
case members[i] == 'C':
members[i] = 'G'
case members[i] == 'T':
members[i] = 'A'
case members[i] == 'A':
members[i] = 'U'
}
}

/* playing with a different way, using range and rune conversion
for i, r := range dna {
switch {
case r == rune('G'):
members[i] = rune('C')
case r == rune('C'):
members[i] = rune('G')
case r == rune('T'):
members[i] = rune('A')
case r == rune('A'):
members[i] = rune('U')
}
}
*/

return string(members)
}

+ 21
- 0
go/rna-transcription/rna_transcription_test.go View File

@@ -0,0 +1,21 @@
package strand

import "testing"

func TestRNATranscription(t *testing.T) {
for _, test := range rnaTests {
if actual := ToRNA(test.input); actual != test.expected {
t.Fatalf("FAIL: %s - ToRNA(%q): %q, expected %q",
test.description, test.input, actual, test.expected)
}
t.Logf("PASS: %s", test.description)
}
}

func BenchmarkRNATranscription(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, test := range rnaTests {
ToRNA(test.input)
}
}
}

Loading…
Cancel
Save