From 59de67963d47b98ef3fc7eec0557dafe7f0da602 Mon Sep 17 00:00:00 2001 From: Alberto Venturini Date: Sun, 1 Sep 2024 17:02:41 +0200 Subject: [PATCH] Solve a few problems --- .gitignore | 3 +++ 01_dna/dna.nim | 11 +++++++++++ 01_dna/input.txt | 1 + 01_dna/rosalind_dna.txt | 1 + 02_rna/input.txt | 1 + 02_rna/rna.nim | 7 +++++++ 02_rna/rosalind_rna.txt | 1 + 03_revc/input.txt | 1 + 03_revc/revc.nim | 28 ++++++++++++++++++++++++++++ 03_revc/rosalind_revc.txt | 1 + 04_fib/fib.nim | 16 ++++++++++++++++ 04_fib/rosalind_fib.txt | 1 + 05_fibd/fibd.nim | 28 ++++++++++++++++++++++++++++ 05_fibd/rosalind_fibd.txt | 1 + 14 files changed, 101 insertions(+) create mode 100644 .gitignore create mode 100644 01_dna/dna.nim create mode 100644 01_dna/input.txt create mode 100644 01_dna/rosalind_dna.txt create mode 100644 02_rna/input.txt create mode 100644 02_rna/rna.nim create mode 100644 02_rna/rosalind_rna.txt create mode 100644 03_revc/input.txt create mode 100644 03_revc/revc.nim create mode 100644 03_revc/rosalind_revc.txt create mode 100644 04_fib/fib.nim create mode 100644 04_fib/rosalind_fib.txt create mode 100644 05_fibd/fibd.nim create mode 100644 05_fibd/rosalind_fibd.txt 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