搜索
查看: 2686|回复: 8

开贴刷代码实践,行动代号335

[复制链接]

2

主题

10

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2017-7-20 16:43:14 | 显示全部楼层 |阅读模式
争取2日一贴



上一篇:推荐一个简便的可视化核酸、蛋白绘画工具IBS
下一篇:qplot,Y叔说这个影响学绘图的基本语法
回复

使用道具 举报

2

主题

10

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2017-7-20 20:31:11 | 显示全部楼层
本帖最后由 bioamin 于 2017-7-21 17:47 编辑

遵循师姐指导,直达代码基础练习网站http://rosalind.info

number1:将基因序列里的T转换为U

ProblemAn RNA string is a string formed from the alphabet containing 'A', 'C', 'G', and 'U'.
Given a
DNA string t t corresponding to a coding strand, its transcribed RNA string u uis formed by replacing all occurrences of 'T' in t t with 'U' in u u.
Given: A
DNA string t t having length at most 1000 nt.
Return: The transcribed RNA string of t t.
Sample DatasetGATGGAACTTGACTACGTAAATT
Sample OutputGAUGGAACUUGACUACGUAAAUU
  


1.首先下载序列文件rosalind_rna.txt

2.代码如下
#user/bin/perl!
open (INPUT,"C:/Users/Desktop/rosalind_rna.txt");//将序列文件rosalind_rna.txt导入文件句柄INPUT
open (OUTPUT,">C:/Users/Desktop/out");//将文件句柄输出到文件out中
chomp($string=<INPUT>);//按行输入给变量$string(此处文件只有一行),并去除末尾换行符
@arr=split('',$string);//将字符串按字符输入给数组
foreach(@arr)
{
if($_ eq 'T'){$_='U';}
}//将数组内的每个变量都循环,并将变量T转换为U
$string2=join('',@arr);//将转换后的数组转变为字符串
print OUTPUT "$string2";//将字符串输出至文件句柄OUTPUT
close INPUT;//关闭文件句柄
close OUTPUT;//关闭文件句柄

3.输出文件out,上传网站检验正确





回复 支持 反对

使用道具 举报

2

主题

10

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2017-7-20 21:44:58 | 显示全部楼层
本帖最后由 bioamin 于 2017-7-21 16:29 编辑

遵循师姐指导,直达代码基础练习网站http://rosalind.info

number2:求DNA反向互补序列

Problem

In DNA strings, symbols 'A' and 'T' are complements of each other, as are 'C' and 'G'.

The reverse complement of a DNA string s s is the string s c  sc formed by reversing the symbols of s s, then taking the complement of each symbol (e.g., the reverse complement of "GTCA" is "TGAC").

Given: A DNA string s s of length at most 1000 bp.

Return: The reverse complement s c  sc of s s.

Sample Dataset

AAAACCCGGT

Sample Output

ACCGGGTTTT


1.首先下载数据文件rosalind_revc.txt

2.代码运行:
#!user/bin/perl
open (INPUT,"C:/Users/Desktop/rosalind_revc.txt");
//文件句柄输入
pen (OUTPUT,">C:/Users/Desktop/out");//文件句柄输出
chomp($string=<INPUT>);//将文件的序列(只有一行)输入到字符串并去掉换行符
@arr=split('',$string);//将字符序列转入数组
foreach(@arr)
    {
       if($_ eq 'A'){$_='T';next;}
       if ($_ eq 'T'){$_='A';next;}
       if($_ eq 'G'){$_='C';next;}
       if($_ eq 'C'){$_='G';next;}
     }//将数组中的字符以互补字符替代
$string2=join('',@arr);//将数组中的单个字符转到字符串里
$string2=reverse($string2);//字符串反转
print OUTPUT "$string2";//输出字符串到文件句柄
close INPUT;
//关闭文件句柄
close OUTPUT;//关闭文件句柄
3.将输出文件提交至网站,检验正确

回复 支持 反对

使用道具 举报

2

主题

10

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2017-7-21 15:29:09 | 显示全部楼层
本帖最后由 bioamin 于 2017-7-21 16:29 编辑

number3 :兔子生兔子,一对兔子一个月生K对,兔子经过一个月后可进入生育期,问:n个月后又多少兔子:
其中n=33,k=2;
难点:1.perl代码不会实现递归算法,只好改用C++,有大神会用perl实现求分享。
          2.数据太大,int型无法存储,double型无法读取,只好用double型变量,然后转换为string型变量读取

Problem

A sequence is an ordered collection of objects (usually numbers), which are allowed to repeat. Sequences can be finite or infinite. Two examples are the finite sequence (π,−2–√,0,π)(π,−2,0,π) and the infinite sequence of odd numbers (1,3,5,7,9,…)(1,3,5,7,9,…). We use the notation anan to represent the nn-th term of a sequence.

A recurrence relation is a way of defining the terms of a sequence with respect to the values of previous terms. In the case of Fibonacci's rabbits from the introduction, any given month will contain the rabbits that were alive the previous month, plus any new offspring. A key observation is that the number of offspring in any month is equal to the number of rabbits that were alive two months prior. As a result, if FnFn represents the number of rabbit pairs alive after the nn-th month, then we obtain the Fibonacci sequence having terms FnFn that are defined by the recurrence relation Fn=Fn−1+Fn−2Fn=Fn−1+Fn−2 (with F1=F2=1F1=F2=1 to initiate the sequence). Although the sequence bears Fibonacci's name, it was known to Indian mathematicians over two millennia ago.

When finding the nn-th term of a sequence defined by a recurrence relation, we can simply use the recurrence relation to generate terms for progressively larger values of nn. This problem introduces us to the computational technique of dynamic programming, which successively builds up solutions by using the answers to smaller cases.

Given: Positive integers n≤40n≤40 and k≤5k≤5.

Return: The total number of rabbit pairs that will be present after nn months, if we begin with 1 pair and in each generation, every pair of reproduction-age rabbits produces a litter of kk rabbit pairs (instead of only 1 pair).

Sample Dataset

5 3
Sample Output

19

1.下载数据显示n=33,K=2
2.编写代码如下:
#include <iostream>//c++头文件
#include <string>//字符型变量头文件
#include <stdio.h>//将double型数据转换为string型数据的头文件
using namespace std;

double add(int  n)//递归函数,自己调用自己
{
if (n==1) {return 1; }
if (n==2) {return 1; }
if (n>2)  {return (2*add(n-2) +add(n-1));}
}


int main()//主函数
{
        char buffer[20];
       sprintf(buffer,"%f",add(33));//定义字符缓冲区
       string str =buffer;//转换为字符型
        cout<<str<<endl;

return 0;
}



回复 支持 反对

使用道具 举报

2

主题

10

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2017-7-26 17:26:21 | 显示全部楼层
本帖最后由 bioamin 于 2017-7-26 17:27 编辑

fasta文件计算输出GC含量最高的序列的id及其GC含量
#!user/bin/perl
open(IN,"rosalind_gc.txt")or die "cannot open IN file";
open(out,">out");
%hash;#GC含量与序列id构建哈希
$i=0;#用于统计序列条数
while (<IN>)
{
chomp();
if (/^>/){$i++; $name=$_;$name=~ s/^>//;}#记录序列条数,将序列id赋予$name
else
  {
    while(/[ATCG]/g)
     {
        if ($& eq 'A'){$A++;}
        if ($& eq 'T'){$T++;}
        if ($& eq 'C'){$C++;}
        if ($& eq 'G'){$G++;}
      }#统计A,T,C,G个数
    }
$total=$A+$T+$C+$G;
if ($total ne 0)
{$GC=($C+$G)/$total;}
$hash{$name}=$GC;#将序列id与序列GC含量构建哈希
}
@arr=values %hash;@arr=sort @arr;#将GC含量赋予数组并排序,最大的GC含量在数组最后一位@arr[i-1];
while(($key,$value)=each %hash)#遍历哈希,将GC含量最大的键和值输出,键为id,值为GC含量
{
if ($arr[i-1]=~ m/$value/){
print out "$key\n"."$hash{$key}\n";
}
}

close IN;
close out;
回复 支持 反对

使用道具 举报

3

主题

34

帖子

310

积分

中级会员

Rank: 3Rank: 3

积分
310
发表于 2017-8-15 10:21:45 | 显示全部楼层
bioamin 发表于 2017-7-21 15:29
number3 :兔子生兔子,一对兔子一个月生K对,兔子经过一个月后可进入生育期,问:n个月后又多少兔子:
其 ...

[Python] 纯文本查看 复制代码
def f(k,n):
    if n == 0:
        return 1
    else:
        return k**n + f(k,n-1)
    
print(f(3,2))


python实现的
回复 支持 反对

使用道具 举报

2

主题

10

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2017-8-22 13:37:48 | 显示全部楼层
666,,佩服
回复

使用道具 举报

634

主题

1182

帖子

4030

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4030
发表于 2017-8-22 14:32:34 | 显示全部楼层
很棒,继续保持
你这个问题很复杂,需要打赏,请点击 http://www.bio-info-trainee.com/donate 进行打赏,谢谢
回复 支持 反对

使用道具 举报

1

主题

10

帖子

480

积分

中级会员

Rank: 3Rank: 3

积分
480
发表于 2017-8-25 10:03:47 | 显示全部楼层
赞一个!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-9-21 09:32 , Processed in 0.039741 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.