commit 59de67963d47b98ef3fc7eec0557dafe7f0da602 Author: Alberto Venturini Date: Sun Sep 1 17:02:41 2024 +0200 Solve a few problems diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19b1fbb --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +* +!*.* +!*/ diff --git a/01_dna/dna.nim b/01_dna/dna.nim new file mode 100644 index 0000000..d89f0b5 --- /dev/null +++ b/01_dna/dna.nim @@ -0,0 +1,11 @@ +import std/strformat +import std/tables + +var baseCounts = {'A': 0, 'C': 0, 'G': 0, 'T': 0}.toTable +var dnaString = readFile("rosalind_dna.txt") + +for c in items(dnaString): + if c in baseCounts: + inc(baseCounts[c]) + +echo fmt"{baseCounts['A']} {baseCounts['C']} {baseCounts['G']} {baseCounts['T']}" \ No newline at end of file diff --git a/01_dna/input.txt b/01_dna/input.txt new file mode 100644 index 0000000..7aa53d7 --- /dev/null +++ b/01_dna/input.txt @@ -0,0 +1 @@ +AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC diff --git a/01_dna/rosalind_dna.txt b/01_dna/rosalind_dna.txt new file mode 100644 index 0000000..ffe5d32 --- /dev/null +++ b/01_dna/rosalind_dna.txt @@ -0,0 +1 @@ +CTTCACCTGGTAGCGACTGACTTTTCCAGCGCGGTGGCATTACTAGTTCGCTAACTAATTTGAAACTAGTTACAACGCAGACATCTAGCTAGTCTTCTCCGCTAACTCCCCCCGTCTCAGTTATACCTCGTACAAATGACCCGCAAATGGGAGTGGACACCGAATTTGGATGTCTTAATCTGAGTGCCCGACATTCAGCTGCCTGTACAAAATTGGTCGCATCTTTAGAGGATTGTATGAACCTAATGGTGGATCGCAGTTGATACACCATAGAGGATGACCGCGGCGGTTTAGAGCTTATTAGCGGCGGTTAAACAATAGGGATCAAGTGATGTAAGCTATAATGCATCCGACTGGGCCGCATTTTCGTTGCTTGGGCTATCGCGGGCCGAGTTCGTTTGTGTGGCCTCGGTTACATCCCCTTAGACGCAAAGTTATCGTCTACCGAACGAAACTTTTCCGCAGTATTCAACTTGGTGATGCAGACAATGACAGAAAGAGTTAGGATACAGTGACTACGCTAAATCGATAAGTCCACACTCGGGCCAGCATGTACTTATCCCGCATATTATAACCGATGGTCGTCTGAAGGAATGAACGCTTACCTCGTTCCTACTGGATTAGAGTGAAACATGTTATCTGCAAGTCCTTACTACACCAGTTAAAAATGTTACGTGCTTTTGTACACGAGTACGCTCCCAGGTTATCTCGTTAACGAACTGTAATTCGCCTCCGTGTACTATAAGCGTACTCTCTAAAAGAGAAGAATACTAAGCGCCGTGACTACCAGATGGGGATCAGTCGTGGAGGGCTGCACGCCGGCTTCCTTCTGACACAGCCCCAGGATCCTCGGCTTGCCAGGGGTTCGTCATGTATAGGACGATCTACATCCGCGCCATTCAGATTCTGACTCCATCCGCTGGAATGATGGGTTATGATCTATGGGGGCGAATGGATAGTACCT diff --git a/02_rna/input.txt b/02_rna/input.txt new file mode 100644 index 0000000..00f9b86 --- /dev/null +++ b/02_rna/input.txt @@ -0,0 +1 @@ +GATGGAACTTGACTACGTAAATT \ No newline at end of file diff --git a/02_rna/rna.nim b/02_rna/rna.nim new file mode 100644 index 0000000..9ef72af --- /dev/null +++ b/02_rna/rna.nim @@ -0,0 +1,7 @@ +import os +import std/strutils + +let fileName = paramStr(1) +let dna = readFile(fileName) +let rna = multiReplace(dna, ("T", "U")) +echo rna diff --git a/02_rna/rosalind_rna.txt b/02_rna/rosalind_rna.txt new file mode 100644 index 0000000..fd3462a --- /dev/null +++ b/02_rna/rosalind_rna.txt @@ -0,0 +1 @@ +CGGATAGGCGCACTGTGGAGGTCGAGAACGAGTAATAGATGTCTTAGACGCAGTTCTTATATTCTAATAACCAAACCCAAGGGTCCAAGTAAGACGAGTGTAAAACGGCCCACGTGTTTTAGCCCGTGTCGATGTGTGATAGCTGCCGTCTGCTTTAGGTCTCGGCAGGTCCGATCCCTGATTTGCCAGTGGGGGCATGCTGAGAAGTTTCGTATAGATGAATAATCTCTCTAAGACATCTCCGTAAAGGTAAAAACTGTGACCGCCGTAGTGACGCATCTCGCCGCGCGACCACTCATCACCTTGAACAAATGCACGTAATAGATATTTAGGCTGCGTATGTTTTGAGTTCGGGCGACAGTGCGCTTGGCGGTCGCAGAGGGGCGGAGGCGTACGGGCTGTCCGCAACTGTCCTTCCCGGCGACCCTAGATAGGGAATGCAAACCCCCAGCTGCCCCTAATACTAACACCCGCATTTCCCATTACTTCTCACAATAGGGCATTGGTTCACTGGTGCACTAGATGGCAGGGTACGGAGTGGGCTTGGCTTCGAACGAACAAACGACGTAGGCGGTGTTATCTAAATTAGAGATGGCTTAAGTCCTAAAATCCTCACATCGTAACGAGGATCTAATTGGGATTTCTCTTTACCGGACCAGAGATACCTGTCAGCCCAGGTCTTGAATCCAAGTGATCACCGATGGAACATTAATTACTTCTGATTGCCCGAGCTTAACTAGGTCTATTGCCGAAAAAGTCTAAGAAGTCTGAGTAACTCTCGACCCTCGCACGTCATTCACGCCGTTTATTTCGAACGCTTTCGCGGTCGTTTTATGATATAGGCAGATGCCAGGACGCGTACAAGCGAATACTCACCCCCAAGTTCCCAAGATCTCGTTCGTCCGAGTAGGGAGAATTAGTCGCTCTACCTGGGGCCTTCGCGTGGTCTAACTTAGAAACTTTAGTCACGGTGGTCTTAGTGGTAATGACCACCTCA diff --git a/03_revc/input.txt b/03_revc/input.txt new file mode 100644 index 0000000..64a2538 --- /dev/null +++ b/03_revc/input.txt @@ -0,0 +1 @@ +AAAACCCGGT \ No newline at end of file diff --git a/03_revc/revc.nim b/03_revc/revc.nim new file mode 100644 index 0000000..9831623 --- /dev/null +++ b/03_revc/revc.nim @@ -0,0 +1,28 @@ +import os + +proc complement(c: char): char = + return case c: + of 'A': 'T' + of 'T': 'A' + of 'C': 'G' + of 'G': 'C' + else: + raise newException(ValueError, "Invalid letter") + +let fileName = paramStr(1) +var dna = readFile(fileName) + +for i in 0 .. dna.len div 2: + let j = dna.len - 1 - i + if i > j: + break + elif i == j: + dna[i] = complement(dna[i]) + else: + let temp = dna[i] + dna[i] = complement(dna[j]) + dna[j] = complement(temp) + +echo dna + + diff --git a/03_revc/rosalind_revc.txt b/03_revc/rosalind_revc.txt new file mode 100644 index 0000000..518a77c --- /dev/null +++ b/03_revc/rosalind_revc.txt @@ -0,0 +1 @@ +GCATCGGTCTTGGTACTGTCGGAACCGATATCTCTCGCCTTCGCTGAGTTGGTGGGCGTTGATACAGCCCAACATCCTCACACAGGAGCATTAAGTGACACCATGTGCGACGGCTGCCTCGCGAGCGAACGCCGCATTTCTCATAGTAGGGACTTGGTGATGGACATGATGTAGGCAGTGGGTCTGTCGCCGCCACCGCGCGCGTACTGGTCATTGACTAGGCTGTGTACTTAGGCATACAGCTTACGACTGACTGGACTTCCAATAACGTTATCGTTCTAGACTTGTTACGTAGGGAATGTACTTTGTTCGACTGACCTTCGTGACCCTGCTGTGCCCCGGGGACTACTACATTTGCTTTCACGCACGGTAGGGTTAACGTGATGGCTTGAAGGGGGCTCACCTCATAGGGATATGCTACACACCGACGAGGCATGACCATATGGGAGTCACACTGGCAAATTAAGGGCAGATCCGTCTCAATATGTCCCAAGTCAATGACTGGCGCCGACAGTGTCTCACGAAGATACACAGGGTCGAACATAGCAAGAGGTGAGAGGGCGGGGCAGCACTGTTAGGCCGCGCAATCCCGCTCGAGGATCACAGGAAGGGGCCCAACAGTAGTGACAGACAATCGGTTATGTCGGCCCTCCAACTGCGGCCTTACGAAAACTACAACTCCGATGAACGCACGGTCTACGGTCGTGTCTATGTGTATCTAACAGTTGTACATATTTCAGGAGTCAGACGCAGAACAACGGAAAAACAGCGCTCGAGACTTTGCCGCTAAGTAATCGCAGATCTTCAAATCGCTAGTCTGAATACACTAATCCGAAACTCTTGATGCACCTTGTTCTGCGTATCCGCTTTATCT \ No newline at end of file diff --git a/04_fib/fib.nim b/04_fib/fib.nim new file mode 100644 index 0000000..2e54ddf --- /dev/null +++ b/04_fib/fib.nim @@ -0,0 +1,16 @@ +import os +import std/strutils + +let n = parseInt(paramStr(1)) +let k = parseInt(paramStr(2)) + +var adultPairs = 0 +var newbornPairs = 1 + +for i in 1 ..< n: + var adultPrevPairs = adultPairs + adultPairs = adultPairs + newbornPairs + newbornPairs = k*adultPrevPairs + +let pairs = adultPairs + newbornPairs +echo $pairs \ No newline at end of file diff --git a/04_fib/rosalind_fib.txt b/04_fib/rosalind_fib.txt new file mode 100644 index 0000000..20c5479 --- /dev/null +++ b/04_fib/rosalind_fib.txt @@ -0,0 +1 @@ +32 5 diff --git a/05_fibd/fibd.nim b/05_fibd/fibd.nim new file mode 100644 index 0000000..31e08cb --- /dev/null +++ b/05_fibd/fibd.nim @@ -0,0 +1,28 @@ +import os +import std/strutils +import sequtils + +let n = parseInt(paramStr(1)) +let m = parseInt(paramStr(2)) + +# pairsByAge is a `seq` which contains the number of pairs +# by their age. +# So, element 0 is newborns, element 1 is 1-month-old pairs, etc. +var pairsByAge = newSeq[int](m) +pairsByAge[0] = 1 + +for i in 1 ..< n: + # Calculates the new pairs at generation i. + # This is the sum of all adult pairs at previous generations, + # i.e., all elements of the `pairsByAge` array from 1 to m. + # This assumes k = 1. + var newPairs = pairsByAge[1..^1].foldl(a+b) + + # Calculates the number of pairs for each age at this generation. + for j in countDown(m-1, 1): + pairsByAge[j] = pairsByAge[j-1] + + pairsByAge[0] = newPairs + +let total = pairsByAge.foldl(a+b) +echo $total \ No newline at end of file diff --git a/05_fibd/rosalind_fibd.txt b/05_fibd/rosalind_fibd.txt new file mode 100644 index 0000000..360f3f0 --- /dev/null +++ b/05_fibd/rosalind_fibd.txt @@ -0,0 +1 @@ +85 20