Skip to content

Commit

Permalink
Implement rna-transcription exercise (#65)
Browse files Browse the repository at this point in the history
* add rna transcription exercise

* remove garbage files

---------

Co-authored-by: lucaferranti <[email protected]>
  • Loading branch information
kytrinyx and lucaferranti authored Mar 5, 2024
1 parent 6a230f7 commit 49372e3
Show file tree
Hide file tree
Showing 9 changed files with 135 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,14 @@
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "rna-transcription",
"name": "RNA Transcription",
"uuid": "beda40ac-15ba-4a7c-a88d-acd64a2aeaf2",
"practices": [],
"prerequisites": [],
"difficulty": 1
}
]
},
Expand Down
20 changes: 20 additions & 0 deletions exercises/practice/rna-transcription/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Instructions

Your task is determine the RNA complement of a given DNA sequence.

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`

~~~~exercism/note
If you want to look at how the inputs and outputs are structured, take a look at the examples in the test suite.
~~~~
16 changes: 16 additions & 0 deletions exercises/practice/rna-transcription/.docs/introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Introduction

You work for a bioengineering company that specializes in developing therapeutic solutions.

Your team has just been given a new project to develop a targeted therapy for a rare type of cancer.

~~~~exercism/note
It's all very complicated, but the basic idea is that sometimes people's bodies produce too much of a given protein.
That can cause all sorts of havoc.
But if you can create a very specific molecule (called a micro-RNA), it can prevent the protein from being produced.
This technique is called [RNA Interference][rnai].
[rnai]: https://admin.acceleratingscience.com/ask-a-scientist/what-is-rnai/
~~~~
17 changes: 17 additions & 0 deletions exercises/practice/rna-transcription/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"authors": ["lucaferranti"],
"files": {
"solution": [
"src/rna-transcription.chpl"
],
"test": [
"test/tests.chpl"
],
"example": [
".meta/reference.chpl"
]
},
"blurb": "Given a DNA strand, return its RNA Complement Transcription.",
"source": "Hyperphysics",
"source_url": "https://web.archive.org/web/20220408112140/http://hyperphysics.phy-astr.gsu.edu/hbase/Organic/transcription.html"
}
9 changes: 9 additions & 0 deletions exercises/practice/rna-transcription/.meta/reference.chpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module RnaTranscription {

const LOOKUP = ["A" => "U", "C" => "G", "G" => "C", "T" => "A"];

proc toRna(dna: string): string {
return "".join([c in dna] LOOKUP[c]);
}
}

28 changes: 28 additions & 0 deletions exercises/practice/rna-transcription/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.

[b4631f82-c98c-4a2f-90b3-c5c2b6c6f661]
description = "Empty RNA sequence"

[a9558a3c-318c-4240-9256-5d5ed47005a6]
description = "RNA complement of cytosine is guanine"

[6eedbb5c-12cb-4c8b-9f51-f8320b4dc2e7]
description = "RNA complement of guanine is cytosine"

[870bd3ec-8487-471d-8d9a-a25046488d3e]
description = "RNA complement of thymine is adenine"

[aade8964-02e1-4073-872f-42d3ffd74c5f]
description = "RNA complement of adenine is uracil"

[79ed2757-f018-4f47-a1d7-34a559392dbf]
description = "RNA complement"
5 changes: 5 additions & 0 deletions exercises/practice/rna-transcription/Mason.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[brick]
name="rna-transcription"
version="0.1.0"
chplVersion="1.33.0"
type="application"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module RnaTranscription {
// write your solution here
}

28 changes: 28 additions & 0 deletions exercises/practice/rna-transcription/test/tests.chpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
use UnitTest;
use RnaTranscription;

proc test_empty_rna_sequence(test : borrowed Test) throws {
test.assertTrue(toRna("").isEmpty());
}

proc test_rna_complement_of_cytosine_is_guanine(test : borrowed Test) throws {
test.assertEqual(toRna("C"), "G");
}

proc test_rna_complement_of_guanine_is_cytosine(test : borrowed Test) throws {
test.assertEqual(toRna("G"), "C");
}

proc test_rna_complement_of_thymine_is_adenine(test : borrowed Test) throws {
test.assertEqual(toRna("T"), "A");
}

proc test_rna_complement_of_adenine_is_uracil(test : borrowed Test) throws {
test.assertEqual(toRna("A"), "U");
}

proc test_rna_complement(test : borrowed Test) throws {
test.assertEqual(toRna("ACGTGGTCTTAA"), "UGCACCAGAAUU");
}

UnitTest.main();

0 comments on commit 49372e3

Please sign in to comment.