カメヲラボ

主にプログラミングとお勉強全般について書いてます

0.00278%くらいの確率で通るコード

悪い意味で頭がおかしい

http://golf.shinh.org/p.rb?simple+octagon+tesselation
参戦者が少なくて寂しかったのですが、1人2人でも手を抜かずに!


というわけで、CとRubyで酷いことをやってしまいました。

C(119B)
i,j,k;
main(a,n)
{
  for( n%=33u; i<n;
   putchar(
    ++j+a>n-fmax(k=n%4*3-(i>9?n+~i:i)/3*3,0) ?
     j=!++i,10 : " #"[j>k&&a^j%3&1]
   )
  )a=i%3<1;
}
Ruby(105B)
i=0;eval'(1..n-[k=n%4-[i,n-i+=1].min/3,0].max*3-a=i%3&1).map{|j|putc" #"[j>k*3?a^j%3&1:0]};puts;'*n=id%33

グレイコードの時も使われた、乱数を利用する方法を用いたわけですが、普通は10未満の小さな値でやります。でないと確率がバカみたいに低いからです。0〜4を出すだけで5×5×5=125分の1で、100回前後postしなければならないわけですが、今回は33×33×33=35937分の1という確率のコードを通しました。しかもCとRubyで2回も(;´Д`)

最初に通したときは、34000回くらいで通りました。2回目は22000回くらい。もちろん100回程度で通るバージョンは何度も通してるので、post回数は軽く60000回は超えると思います。

shinhさんゴメンナサイもうしません(´ω`)