首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从世代中转移细菌的DNA

从世代中转移细菌的DNA
EN

Code Golf用户
提问于 2015-02-05 03:44:15
回答 1查看 317关注 0票数 3

Introduction

科学家最近发现了一种新型细菌,这种细菌以奇怪的方式复制。为了繁殖,两种细菌各分裂成3种(总共6种)并结合在一起(产生3种细菌,两种亲本,一种孩子)。然而,这种细菌只有在有伴侣的情况下才能分裂。例如,两个细菌分裂并结合成3,3,4,6等等。另外,当细菌分裂时,只有一个子细胞与另一个母细胞的子细胞结合,反之亦然。换句话说,如果细菌A和B分裂,子代细胞将结合为AA,AB和BB。

挑战

你面临的挑战是制作一个接受或生成4种细菌DNA的程序,每个程序都带有10位第四纪格式中的一条链。例如DNA链可能是0123302012。当两个子细菌结合在一起时,DNA就会被合并成一种四方形的方式( DNA可以在每一对中合并,或者只有AB对,你的选择)。说明0是隐性性状,1是混合性状,2是显性性状。然而,当有一个3,它是一个突变的特点(更多的这一点稍后)。从这4种细菌开始,让你的程序运行20次试验(4次分裂为6次将是第一次试验)。一旦完成,让程序输出通过STDOUT (或等效)每个细胞的DNA分离线,但只有从第20次试验产生的细胞。

关键特征

  • 每项试验都必须计算新的细胞数量和每个新细胞的DNA (见下文)。
  • 该程序必须输出每个20试细胞的DNA ( 4046个新细菌),每个在STDOUT (或同等)的分离线上。
  • 细菌必须按上述方法每一次复制。(A和B分裂为AA、AB和BB)。

DNA如何在

上传递

平底洞式中,DNA从父母传给孩子,其中:

  • 0是一个隐性性状(rr)。
  • 1是一个混合性状(Rr)。
  • 2是显性性状(RR)。

如果其中一个性状是3 (a突变),则结束性状是随机决定的,但如果两者都是3,则结束性状为3。父母可以随机或按顺序(A & B、C& D等)决定。

示例:

代码语言:javascript
复制
    |   DNA A    |   DNA B    | DNA C (Child) |
    | 0123311200 | 1203123213 |  0113012203   |

评分

这是密码高尔夫,所以最短的字符计数获胜!为了清晰起见,如果可能的话,请包含一个将代码分隔成多行的版本。如果挑战没有得到很好的解释,或者你有建议,发表评论!

下面是一个成功完成挑战的示例程序(在java中):Ideone链接

EN

回答 1

Code Golf用户

发布于 2015-02-05 04:47:56

Haskell - 349

代码语言:javascript
复制
import Control.Monad
import System.Random
import Data.List
a=[0,1,2,3,3,1,1,2,0,0]
b=[a,a,a,a]
f 3 _=randomRIO(0,3)
f _ 3=randomRIO(0,3)
f x y=return$div(x+y)2
z::[Integer]->[Integer]->IO[Integer]
z x y=zipWithM f x y
c=filter(\x->length x==2).subsequences
r=sequence.map(\x->z(x!!0)(x!!1)).c
y=foldr(<=<)return.replicate 20
main=y r b>>=mapM_ print

用更好看的源代码:http://ideone.com/9FUMLd在线试用

由于时间的限制,网上的例子只能持续到2,而不是20。

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/45375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档