別の目的で作りかけていたものですが、10分ほどかけて改造しました。
書きかけであったのでチェックほとんどできていませんので、コドンの記述は確認の上で
他の回答が無くて、どうしようもない時はお使いください(押し売りみたい)
核酸配列の後の数値が出現確率です。とりあえず全部1にしてありますので、適当に変えてください。小数を含んでいても正常に動きます。
適当なファイル名(例えば henkan.rbなど)で保存し、ターミナルソフトで
ruby henkan.rb
とすれば動くはずです。乱数で配列を決めていますが、ソフト内蔵の乱数ですのでそこそこのレベルということで、
気になるようでしたら、他の乱数に変えてください。
------------------------------------
aa_to_codon={"A"=>[["gca", 1], ["gct", 1], ["gcg", 1], ["gcc", 1]],
"C"=>[["tgt", 1], ["tgc", 1]],
"D"=>[["gat", 1], ["gac", 1]],
"E"=>[["gaa", 1], ["gag", 1]],
"F"=>[["ttt", 1], ["ttc", 1]],
"G"=>[["gga", 1], ["ggt", 1], ["ggg", 1], ["ggc", 1]],
"H"=>[["cat", 1], ["cac", 1]],
"I"=>[["ata", 1], ["att", 1], ["atc", 1]],
"K"=>[["aaa", 1], ["aag", 1]],
"L"=>[["tta", 1], ["ttg", 1], ["cta", 1], ["ctt", 1], ["ctg", 1], ["ctc", 1]],
"M"=>[["atg", 1]],
"N"=>[["aat", 1], ["aac", 1]],
"P"=>[["cca", 1], ["cct", 1], ["ccg", 1], ["ccc", 1]],
"Q"=>[["caa", 1], ["cag", 1]],
"R"=>[["aga", 1], ["agg", 1], ["cga", 1], ["cgt", 1], ["cgg", 1], ["cgc", 1]],
"S"=>[["agt", 1], ["agc", 1], ["tca", 1], ["tct", 1], ["tcg", 1], ["tcc", 1]],
"T"=>[["aca", 1], ["act", 1], ["acg", 1], ["acc", 1]],
"V"=>[["gta", 1], ["gtt", 1], ["gtg", 1], ["gtc", 1]],
"W"=>[["tgg", 1]],
"Y"=>[["tat", 1], ["tac", 1]]}
aa_to_codon.keys.each do |c|
sum=0.0
aa_to_codon[c].each{|a| a[1]=(sum=sum+a[1])}
end
aa_seq="VKHSLCCC" # アミノ酸配列
na_seq=aa_seq.scan(/./).collect{|aa|
cods=aa_to_codon[aa]
rnd=rand()*(cods[-1][1]) # 乱数
cods.drop_while{|c| c[1] < rnd}[0][0]
}.join(" ")
puts na_seq.upcase # 小文字でよければ.upcaseを削除