mirror of
https://github.com/Xevion/exercism.git
synced 2025-12-08 14:07:01 -06:00
PowerShell - nucleotide-count
This commit is contained in:
22
powershell/nucleotide-count/.exercism/config.json
Normal file
22
powershell/nucleotide-count/.exercism/config.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"blurb": "Given a DNA string, compute how many times each nucleotide occurs in the string.",
|
||||
"authors": [
|
||||
"gyssels"
|
||||
],
|
||||
"contributors": [
|
||||
"kchenery"
|
||||
],
|
||||
"files": {
|
||||
"solution": [
|
||||
"NucleotideCount.ps1"
|
||||
],
|
||||
"test": [
|
||||
"NucleotideCount.tests.ps1"
|
||||
],
|
||||
"example": [
|
||||
".meta/NucleotideCount.example.ps1"
|
||||
]
|
||||
},
|
||||
"source": "The Calculating DNA Nucleotides_problem at Rosalind",
|
||||
"source_url": "http://rosalind.info/problems/dna/"
|
||||
}
|
||||
1
powershell/nucleotide-count/.exercism/metadata.json
Normal file
1
powershell/nucleotide-count/.exercism/metadata.json
Normal file
@@ -0,0 +1 @@
|
||||
{"track":"powershell","exercise":"nucleotide-count","id":"7817a1dab53e4af18785a020a493fa16","url":"https://exercism.org/tracks/powershell/exercises/nucleotide-count","handle":"Xevion","is_requester":true,"auto_approve":false}
|
||||
1
powershell/nucleotide-count/.version
Normal file
1
powershell/nucleotide-count/.version
Normal file
@@ -0,0 +1 @@
|
||||
0
|
||||
33
powershell/nucleotide-count/HELP.md
Normal file
33
powershell/nucleotide-count/HELP.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Help
|
||||
|
||||
## Running the tests
|
||||
|
||||
To run the tests run the command `Invoke-Pester` from within the exercise directory.
|
||||
|
||||
## Submitting your solution
|
||||
|
||||
You can submit your solution using the `exercism submit NucleotideCount.ps1` command.
|
||||
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||
|
||||
It's possible to submit an incomplete solution which allows you to:
|
||||
|
||||
- See how others have completed the exercise
|
||||
- Request help from a mentor
|
||||
|
||||
## Need to get help?
|
||||
|
||||
If you'd like help solving the exercise, check the following pages:
|
||||
|
||||
- The [PowerShell track's documentation](https://exercism.org/docs/tracks/powershell)
|
||||
- [Exercism's support channel on gitter](https://gitter.im/exercism/support)
|
||||
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||
|
||||
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||
|
||||
To get help if you are having trouble, you can use one of the following resources:
|
||||
|
||||
- [Powershell Documentation][powershell docs]
|
||||
|
||||
[Add more resources]: TODO
|
||||
|
||||
[powershell docs]: https://docs.microsoft.com/en-us/powershell/
|
||||
36
powershell/nucleotide-count/NucleotideCount.ps1
Normal file
36
powershell/nucleotide-count/NucleotideCount.ps1
Normal file
@@ -0,0 +1,36 @@
|
||||
Function Get-NucleotideCount() {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Given a single stranded DNA string, compute how many times each nucleotide occurs in the string.
|
||||
|
||||
.DESCRIPTION
|
||||
The genetic language of every living thing on the planet is DNA.
|
||||
DNA is a large molecule that is built from an extremely long sequence of individual elements called nucleotides.
|
||||
4 types exist in DNA and these differ only slightly and can be represented as the following symbols: 'A' for adenine, 'C' for cytosine, 'G' for guanine, and 'T' thymine.
|
||||
|
||||
The function counts the occurances of A, C, G and T in the supplied strand. It then outputs in the format:
|
||||
|
||||
A:0, C:0, G:0, T:0
|
||||
|
||||
.PARAMETER Strand
|
||||
The DNA strand to count
|
||||
|
||||
.EXAMPLE
|
||||
Get-NucleotideCount -Strand "ACGTAGCTT"
|
||||
|
||||
Retuns: A:2 C:2 G:2 T:3
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
[string]$Strand
|
||||
)
|
||||
|
||||
if ($Strand -notmatch "^[ACGT]*$") {
|
||||
Throw "Invalid DNA Strand"
|
||||
}
|
||||
|
||||
$counts = @{"A" = 0; "C" = 0; "G" = 0; "T" = 0}
|
||||
foreach ($char in $Strand.ToCharArray()) { $counts[$char.ToString()] += 1 }
|
||||
|
||||
return "A:$($counts['A']) C:$($counts['C']) G:$($counts['G']) T:$($counts['T'])"
|
||||
}
|
||||
25
powershell/nucleotide-count/NucleotideCount.tests.ps1
Normal file
25
powershell/nucleotide-count/NucleotideCount.tests.ps1
Normal file
@@ -0,0 +1,25 @@
|
||||
BeforeAll {
|
||||
. ".\NucleotideCount.ps1"
|
||||
}
|
||||
|
||||
Describe "NucleotideCountTests" {
|
||||
It "empty strand" {
|
||||
Get-NucleotideCount -Strand "" | Should -BeExactly "A:0 C:0 G:0 T:0"
|
||||
}
|
||||
|
||||
It "can count one nucleotide in single-character input" {
|
||||
Get-NucleotideCount -Strand "G" | Should -BeExactly "A:0 C:0 G:1 T:0"
|
||||
}
|
||||
|
||||
It "strand with repeated nucleotide" {
|
||||
Get-NucleotideCount -Strand "GGGGGGG" | Should -BeExactly "A:0 C:0 G:7 T:0"
|
||||
}
|
||||
|
||||
It "strand with multiple nucleotides" {
|
||||
Get-NucleotideCount -Strand "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC" | Should -BeExactly "A:20 C:12 G:17 T:21"
|
||||
}
|
||||
|
||||
It "strand with invalid nucleotides" {
|
||||
{ Get-NucleotideCount -Strand "AGXXACT" } | Should -Throw
|
||||
}
|
||||
}
|
||||
40
powershell/nucleotide-count/README.md
Normal file
40
powershell/nucleotide-count/README.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Nucleotide Count
|
||||
|
||||
Welcome to Nucleotide Count on Exercism's PowerShell Track.
|
||||
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||
|
||||
## Instructions
|
||||
|
||||
Each of us inherits from our biological parents a set of chemical instructions known as DNA that influence how our bodies are constructed. All known life depends on DNA!
|
||||
|
||||
> Note: You do not need to understand anything about nucleotides or DNA to complete this exercise.
|
||||
|
||||
DNA is a long chain of other chemicals and the most important are the four nucleotides, adenine, cytosine, guanine and thymine. A single DNA chain can contain billions of these four nucleotides and the order in which they occur is important!
|
||||
We call the order of these nucleotides in a bit of DNA a "DNA sequence".
|
||||
|
||||
We represent a DNA sequence as an ordered collection of these four nucleotides and a common way to do that is with a string of characters such as "ATTACG" for a DNA sequence of 6 nucleotides.
|
||||
'A' for adenine, 'C' for cytosine, 'G' for guanine, and 'T' for thymine.
|
||||
|
||||
Given a string representing a DNA sequence, count how many of each nucleotide is present.
|
||||
If the string contains characters that aren't A, C, G, or T then it is invalid and you should signal an error.
|
||||
|
||||
For example:
|
||||
|
||||
```
|
||||
"GATTACA" -> 'A': 3, 'C': 1, 'G': 1, 'T': 2
|
||||
"INVALID" -> error
|
||||
```
|
||||
|
||||
## Source
|
||||
|
||||
### Created by
|
||||
|
||||
- @gyssels
|
||||
|
||||
### Contributed to by
|
||||
|
||||
- @kchenery
|
||||
|
||||
### Based on
|
||||
|
||||
The Calculating DNA Nucleotides_problem at Rosalind - http://rosalind.info/problems/dna/
|
||||
Reference in New Issue
Block a user