この記事はQiitaに投稿されたもののフォークです。
これはD言語くん Advent Calendar 2016 3日目の記事です。
新個体の出現
2015年に繁殖期のD言語くんが発見され、D言語くんが単為生殖で増殖するようすが明らかになった。
しかしこの繁殖方法は
- 並列で増えることができない
- 繁殖期のD言語くんが増えない
等の問題点を抱えており、同時にD言語くんの絶滅が危惧された。
だが、最近現地の住民の証言からD言語くんが別の繁殖方法を獲得したらしいことがわかった。その様子を撮影しようと試みたが、その姿をカメラに捉える前に12月になり、D言語くんはクリスマスの装飾に擬態して見えなくなってしまった。かわりに現地住民のスケッチを用いて紹介しよう。
2匹で行われる繁殖
現地住民から得られた情報により再現されるD言語くんの繁殖は以下のようなプロセスを経る。
- 2匹が密着する
- 餅のように伸びる
- 伸びた部分が膨らんでくる
- スライスされ、分離する
ここで注目したいのは、スケッチ上でのD言語くんの胴体に穴が開いていることである。これがD言語くんの通常個体ならば1匹しかいない繁殖期のD言語くんに頼ることなく繁殖することが可能ということで、特定の個体に依存する繁殖方法から脱したということだ。タスマニアデビルがデビル顔面腫瘍性疾患に適応したように、D言語くんが突然変異により進化しているということが考えられる。おせちのカマボコにお餅のエッセンスがmixinしたのだ。また、さらに証言を集めるととんでもない長さに伸びたD言語くんの目撃情報も得られた。
超絶キモい可愛らしい。並列で増える能力を獲得したことによりD言語くんは今後ますます発展していくだろう。
それはともかく
D言語には並列処理を簡単に行う方法がある。
import std.stdio;
import std.math : log;
import std.range : iota;
import std.string : format;
import std.parallelism : TaskPool;
void main()
{
auto pool = new TaskPool();
foreach(index,c;pool.parallel(iota(10)))
{
writeln(format("%s: %s",index,log(index)));
}
pool.finish();
}
/*
出力:
0: -inf
3: 1.09861
5: 1.60944
8: 2.07944
9: 2.19722
6: 1.79176
4: 1.38629
1: 0
2: 0.693147
7: 1.94591
*/
数分原因がわからなくて困ったのでメモする。pool.finish()
がないとプログラムが終了しない。
import std.stdio;
import std.math : log;
import std.range : iota;
import std.string : format;
import std.parallelism : parallel;
void main()
{
foreach(index,c;iota(10).parallel())
{
writeln(format("%s: %s",index,log(index)));
}
}
こんなふうにも書ける。こっちのほうがお手軽。
追記:ゲーム
改めて見返したらリンクがなかったのでいまさら追記。 この記事を題材にゲームを作ってくれた人がいた。