ゆとりーなの日記

日記的な事を書いて行くと思はれる

D言語はじめました

 某教科の課題で、シュミレーションをCやJavaでやりましょうとあったのですが、"や"ってことは別にそれ以外でもいいのだろうということでなぜかD言語を選択しました。

import std.stdio;
import std.algorithm;
import std.random;
 
int count(Mt19937 gen) {
  int[] result = [0, 1, 2, 2, 1, 0, 1, 1, 1, 0, 0, 0, 2, 1];
  gen.seed(unpredictableSeed);
  for (int i = 0; ; ++i) {
    int j;
    for (j = 0; j < 14; ++j) {
      if (result[j] != uniform(0, 3, gen)) {
        break;
      }
    }
    if (j == 14) {
      return i;
    }
  }
}
 
void main() {
  int[2000] counts;
  for (int i = 0; i < counts.length; ++i) {
    Mt19937 gen;
    counts[i] = count(gen);
    writef("%04d %dcounts\n", i, counts[i]);
  }
  auto sum = reduce!("a + b")(0.0, counts);
  auto avr = sum / counts.length;
  writeln(avr);
}

最終結果

4.59672e+06

 正直どちらかというと遅いですかね。はい。隣で友人がC++で書いてたのはもう少し速く終わってたような気がします。とはいっても初D言語なのでとんでもないコードを書いているってのも一因でしょうが。
 あとなぜかC関数のリンクっぽいところ?でこけるのでdmdではコンパイルだけして、gccでCライブラリをリンク?みたいなことをやって取り敢えずお茶を濁しています。ここらへんをまずどうにかしたいですね。
 いかんせんD言語の参考ページが少ないのです。D言語でぐぐっても普通にC言語のページが出てくるぐらい少ないのです。誰かなんとかしてください。