STAP細胞が見つかるまでひたすら適当な細胞を生成し続けるプログラム

MikuHatsune2014-06-03

が話題なのでRでやっといた。

stap <- "STAP"
tmp <- ""
t1 <- proc.time()["elapsed"]
while(tmp != stap){
	tmp <- paste(sample(LETTERS, size=4, replace=TRUE), collapse="")
	print(tmp)
}
t2 <- proc.time()["elapsed"]

paste("STAP細胞の作成に", round(t2 - t1), "秒かかりました")
[1] "STAP細胞の作成に 7 秒かかりました"

たまたま早く作成できたけれども、重複を許してサンプリングしてて、26^4通りの細胞が論理的に考えられるなか、サンプリングの速度を適当に計算して作成にかかる時間の分布が取れるはずなので、やる気のある研究者というか当事者はやってみたらいいんじゃないかな(適当
時間がかかりすぎるので30回くらいやってみた。

niter <- 1000
res <- numeric(niter)
pb <- txtProgressBar(max=niter, style=3)
for(j in seq(niter)){
	setTxtProgressBar(pb, j)
	tmp <- ""
	t1 <- proc.time()["elapsed"]
	while(tmp != stap){
		tmp <- paste(sample(LETTERS, size=4, replace=TRUE), collapse="")
		#print(tmp)
	}
	t2 <- proc.time()["elapsed"]
	res[j] <- t2 - t1
}

Pythonで乱数発生ってあんまりやったことないけれども、こちらからぱくってやった。アルファベットの作成はこちら

import random # モジュールのインポート
alphabet = [chr(i) for i in xrange(97, 123)]
stap = "stap"
tmp = ""
while tmp != stap:
	tmp = ""
	for i in range(4):
		tmp += alphabet[random.randint(0, len(alphabet)-1)]
	
	print tmp

どちらをやるにせよ、並列化したら楽しいと思う。