Solve a few problems

This commit is contained in:
Alberto Venturini 2024-09-01 17:02:41 +02:00
commit 59de67963d
14 changed files with 101 additions and 0 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
*
!*.*
!*/

11
01_dna/dna.nim Normal file
View file

@ -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']}"

1
01_dna/input.txt Normal file
View file

@ -0,0 +1 @@
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC

1
01_dna/rosalind_dna.txt Normal file
View file

@ -0,0 +1 @@
CTTCACCTGGTAGCGACTGACTTTTCCAGCGCGGTGGCATTACTAGTTCGCTAACTAATTTGAAACTAGTTACAACGCAGACATCTAGCTAGTCTTCTCCGCTAACTCCCCCCGTCTCAGTTATACCTCGTACAAATGACCCGCAAATGGGAGTGGACACCGAATTTGGATGTCTTAATCTGAGTGCCCGACATTCAGCTGCCTGTACAAAATTGGTCGCATCTTTAGAGGATTGTATGAACCTAATGGTGGATCGCAGTTGATACACCATAGAGGATGACCGCGGCGGTTTAGAGCTTATTAGCGGCGGTTAAACAATAGGGATCAAGTGATGTAAGCTATAATGCATCCGACTGGGCCGCATTTTCGTTGCTTGGGCTATCGCGGGCCGAGTTCGTTTGTGTGGCCTCGGTTACATCCCCTTAGACGCAAAGTTATCGTCTACCGAACGAAACTTTTCCGCAGTATTCAACTTGGTGATGCAGACAATGACAGAAAGAGTTAGGATACAGTGACTACGCTAAATCGATAAGTCCACACTCGGGCCAGCATGTACTTATCCCGCATATTATAACCGATGGTCGTCTGAAGGAATGAACGCTTACCTCGTTCCTACTGGATTAGAGTGAAACATGTTATCTGCAAGTCCTTACTACACCAGTTAAAAATGTTACGTGCTTTTGTACACGAGTACGCTCCCAGGTTATCTCGTTAACGAACTGTAATTCGCCTCCGTGTACTATAAGCGTACTCTCTAAAAGAGAAGAATACTAAGCGCCGTGACTACCAGATGGGGATCAGTCGTGGAGGGCTGCACGCCGGCTTCCTTCTGACACAGCCCCAGGATCCTCGGCTTGCCAGGGGTTCGTCATGTATAGGACGATCTACATCCGCGCCATTCAGATTCTGACTCCATCCGCTGGAATGATGGGTTATGATCTATGGGGGCGAATGGATAGTACCT

1
02_rna/input.txt Normal file
View file

@ -0,0 +1 @@
GATGGAACTTGACTACGTAAATT

7
02_rna/rna.nim Normal file
View file

@ -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

1
02_rna/rosalind_rna.txt Normal file
View file

@ -0,0 +1 @@
CGGATAGGCGCACTGTGGAGGTCGAGAACGAGTAATAGATGTCTTAGACGCAGTTCTTATATTCTAATAACCAAACCCAAGGGTCCAAGTAAGACGAGTGTAAAACGGCCCACGTGTTTTAGCCCGTGTCGATGTGTGATAGCTGCCGTCTGCTTTAGGTCTCGGCAGGTCCGATCCCTGATTTGCCAGTGGGGGCATGCTGAGAAGTTTCGTATAGATGAATAATCTCTCTAAGACATCTCCGTAAAGGTAAAAACTGTGACCGCCGTAGTGACGCATCTCGCCGCGCGACCACTCATCACCTTGAACAAATGCACGTAATAGATATTTAGGCTGCGTATGTTTTGAGTTCGGGCGACAGTGCGCTTGGCGGTCGCAGAGGGGCGGAGGCGTACGGGCTGTCCGCAACTGTCCTTCCCGGCGACCCTAGATAGGGAATGCAAACCCCCAGCTGCCCCTAATACTAACACCCGCATTTCCCATTACTTCTCACAATAGGGCATTGGTTCACTGGTGCACTAGATGGCAGGGTACGGAGTGGGCTTGGCTTCGAACGAACAAACGACGTAGGCGGTGTTATCTAAATTAGAGATGGCTTAAGTCCTAAAATCCTCACATCGTAACGAGGATCTAATTGGGATTTCTCTTTACCGGACCAGAGATACCTGTCAGCCCAGGTCTTGAATCCAAGTGATCACCGATGGAACATTAATTACTTCTGATTGCCCGAGCTTAACTAGGTCTATTGCCGAAAAAGTCTAAGAAGTCTGAGTAACTCTCGACCCTCGCACGTCATTCACGCCGTTTATTTCGAACGCTTTCGCGGTCGTTTTATGATATAGGCAGATGCCAGGACGCGTACAAGCGAATACTCACCCCCAAGTTCCCAAGATCTCGTTCGTCCGAGTAGGGAGAATTAGTCGCTCTACCTGGGGCCTTCGCGTGGTCTAACTTAGAAACTTTAGTCACGGTGGTCTTAGTGGTAATGACCACCTCA

1
03_revc/input.txt Normal file
View file

@ -0,0 +1 @@
AAAACCCGGT

28
03_revc/revc.nim Normal file
View file

@ -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

View file

@ -0,0 +1 @@
GCATCGGTCTTGGTACTGTCGGAACCGATATCTCTCGCCTTCGCTGAGTTGGTGGGCGTTGATACAGCCCAACATCCTCACACAGGAGCATTAAGTGACACCATGTGCGACGGCTGCCTCGCGAGCGAACGCCGCATTTCTCATAGTAGGGACTTGGTGATGGACATGATGTAGGCAGTGGGTCTGTCGCCGCCACCGCGCGCGTACTGGTCATTGACTAGGCTGTGTACTTAGGCATACAGCTTACGACTGACTGGACTTCCAATAACGTTATCGTTCTAGACTTGTTACGTAGGGAATGTACTTTGTTCGACTGACCTTCGTGACCCTGCTGTGCCCCGGGGACTACTACATTTGCTTTCACGCACGGTAGGGTTAACGTGATGGCTTGAAGGGGGCTCACCTCATAGGGATATGCTACACACCGACGAGGCATGACCATATGGGAGTCACACTGGCAAATTAAGGGCAGATCCGTCTCAATATGTCCCAAGTCAATGACTGGCGCCGACAGTGTCTCACGAAGATACACAGGGTCGAACATAGCAAGAGGTGAGAGGGCGGGGCAGCACTGTTAGGCCGCGCAATCCCGCTCGAGGATCACAGGAAGGGGCCCAACAGTAGTGACAGACAATCGGTTATGTCGGCCCTCCAACTGCGGCCTTACGAAAACTACAACTCCGATGAACGCACGGTCTACGGTCGTGTCTATGTGTATCTAACAGTTGTACATATTTCAGGAGTCAGACGCAGAACAACGGAAAAACAGCGCTCGAGACTTTGCCGCTAAGTAATCGCAGATCTTCAAATCGCTAGTCTGAATACACTAATCCGAAACTCTTGATGCACCTTGTTCTGCGTATCCGCTTTATCT

16
04_fib/fib.nim Normal file
View file

@ -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

1
04_fib/rosalind_fib.txt Normal file
View file

@ -0,0 +1 @@
32 5

28
05_fibd/fibd.nim Normal file
View file

@ -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

View file

@ -0,0 +1 @@
85 20