Skip to content

Instantly share code, notes, and snippets.

class distinct_ball_memo(dict):
def __missing__(self, key):
m, n = key
if n == 0:
return 1
self[key] = m * self[(m, n-1)] + self[(m+1, n-1)]
return self[key]
def distinct_ball(n):
@majiang
majiang / ntt.py
Created March 3, 2012 14:27
Number theoretic transform
# Number theoretic transform.
# Not O(n log n) but O(n^2).
P = (3<<30)+1 # 3221225473
omega0 = 5
omega0inv = 1932735284
def mulmod(a, b):
return (a*b) % P
@majiang
majiang / FNTT.py
Created March 5, 2012 05:14
Fast Number theoretic transform
# number theoretic transform implemented with FFT algorithm: O(n log n).
P = (3<<30)+1 # 3221225473
omega0 = 5
omega0inv = 1932735284
def mulmod(a, b):
return (a*b) % P
OMEGA = {}
@majiang
majiang / gist:1993763
Created March 7, 2012 15:21
heimin rule
* 基本進行
** ディール
プレイヤーは均等な枚数のカードを得る。
** 開始
最初にプレイするプレイヤーは、連続ゲームであれば前回の勝利プレイヤーであり、そうでなければプレイヤーの合意する方法でランダムに選ぶ。
** プレイ
プレイは手からカード集合を選んで場に出すこと (および、それに付随する効果を解決すること) である。最後にプレイされたカード (集合) をトップカード集合または省略してトップカードという。
** アクティブなプレイヤー
ゲームの開始時には、すべてのプレイヤーはアクティブである。
場が流れるたびに、すべてのプレイヤーはアクティブになる。
@majiang
majiang / gist:2093683
Created March 19, 2012 03:47
panel touron
伊藤毅志 電気通信大学助教: 座長
・完全情報ゲームの研究は区切りが見えてきた: 将棋や囲碁ではトッププロに迫るレベル。
・これからは不完全情報ゲームの研究へシフトしていくであろう。
松原仁 公立はこだて未来大学教授 (完全情報ゲーム)「完全情報ゲームから不完全情報ゲームへ」
・ゲームは人工知能の課題として適している
- ルール (∋評価) が明確で人間の専門家もいる。
●完全情報ゲーム
・必勝法
- 二人零和有限確定完全情報ゲームには、いずれかのプレイヤーに必勝法が存在するか、または、双方が最善をつくすと引き分けになることが証明可能である。
@majiang
majiang / mt19937-64.vb
Created March 29, 2012 15:08
Mersenne Twister
' VB translation of http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/C-LANG/mt19937-64.c
Public Class MT
Private Const NN = 312
Private Const MM = 156
Private Const MATRIX_A = &HB5026F5AA96619E9UL
Private Const UM = &HFFFFFFFF80000000UL
Private Const LM = &H7FFFFFFFUL
Private mt(NN - 1) As ULong
Private mti As Integer = NN + 1
module main;
import std.stdio;
import std.conv;
import std.typecons;
auto proper_div(T)(T x, T y)
{
T q = x / y;
@majiang
majiang / gist:2604827
Created May 5, 2012 19:12
unbinary search
def bs(a, b):
if a == b:
return a
if f(a) < 0:
return bs((a+b) / 2, b)
if f(b) > 0:
return bs(a, (a+b) / 2)
raise ValueError('something wrong :(')
from time import sleep
def bs(a, b):
sleep(1)
if a == b:
return a
if f(a) < 0:
return bs((a+b) / 2, b)
if f(b) > 0:
return bs(a, (a+b) / 2)
@majiang
majiang / gist:2666416
Created May 12, 2012 13:03
assignment method
def BF3(cost):
ret = 27
a = range(3)
for a[0] in range(3):
for a[1] in range(3):
for a[2] in range(3):
if sorted(a) == range(3):
ret = min(ret, sum(cost[i][j] for (i, j) in zip(range(3), a)))
return ret