From b19b19833975fb8f675612b38560a17735be191e Mon Sep 17 00:00:00 2001 From: Sascha Mann Date: Wed, 8 Feb 2017 15:56:20 +0100 Subject: [PATCH] Add exercise: nucleotide count (#31) * Add exercise: nucleotide count * Remove hard-coded tuple of valid symbols --- config.json | 9 +++++++++ exercises/nucleotide-count/example.jl | 8 ++++++++ .../nucleotide-count/nucleotide-count.jl | 3 +++ exercises/nucleotide-count/runtests.jl | 19 +++++++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 exercises/nucleotide-count/example.jl create mode 100644 exercises/nucleotide-count/nucleotide-count.jl create mode 100644 exercises/nucleotide-count/runtests.jl diff --git a/config.json b/config.json index 6fef5e31355cc..edbdf79643a56 100644 --- a/config.json +++ b/config.json @@ -35,6 +35,15 @@ "generators" ] }, + { + "slug": "nucleotide-count", + "difficulty": 1, + "topics": [ + "chars", + "strings", + "control-flow (loops)" + ] + }, { "slug": "word-count", "difficulty": 1, diff --git a/exercises/nucleotide-count/example.jl b/exercises/nucleotide-count/example.jl new file mode 100644 index 0000000000000..7e1658fca4967 --- /dev/null +++ b/exercises/nucleotide-count/example.jl @@ -0,0 +1,8 @@ +function count_nucleotides(strand::AbstractString) + counter = Dict('A' => 0, 'C' => 0, 'G' => 0, 'T' => 0) + for sym in strand + sym in keys(counter) || error("Invalid nucleotide in strand") + counter[sym] += 1 + end + return counter +end diff --git a/exercises/nucleotide-count/nucleotide-count.jl b/exercises/nucleotide-count/nucleotide-count.jl new file mode 100644 index 0000000000000..460d4b0d64544 --- /dev/null +++ b/exercises/nucleotide-count/nucleotide-count.jl @@ -0,0 +1,3 @@ +function count_nucleotides(strand::AbstractString) + +end diff --git a/exercises/nucleotide-count/runtests.jl b/exercises/nucleotide-count/runtests.jl new file mode 100644 index 0000000000000..25f227b35a569 --- /dev/null +++ b/exercises/nucleotide-count/runtests.jl @@ -0,0 +1,19 @@ +using Base.Test + +include("nucleotide-count.jl") + +@testset "empty strand" begin + @test count_nucleotides("") == Dict('A' => 0, 'C' => 0, 'G' => 0, 'T' => 0) +end + +@testset "strand with repeated nucleotide" begin + @test count_nucleotides("GGGGGGG") == Dict('A' => 0, 'C' => 0, 'G' => 7, 'T' => 0) +end + +@testset "strand with multiple nucleotides" begin + @test count_nucleotides("AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC") == Dict('A' => 20, 'C' => 12, 'G' => 17, 'T' => 21) +end + +@testset "strand with invalid nucleotides" begin + @test_throws ErrorException count_nucleotides("AGXXACT") +end