In [4]:
function deferred_acceptance(m_prefs::Array{Int64}, f_prefs::Array{Int64})
    m_prefs = m_prefs'
    f_prefs = f_prefs'    

    m_size = size(m_prefs, 1) #男の数
    f_size = size(f_prefs, 1) #女の数
    is_single_prop = ones(Bool, m_size) #男たちが独身かどうか。0なら独身でない1なら独身
    next_resp = ones(Int, m_size) #各人の男たちにとって次求婚する女の順位(最初は皆一番好きな女からアッタクしていく)
    current_prop = zeros(Int, f_size) #暫定的にマッチングしてる女各人にとっての男たちのリスト。
    i = 0
    while sum(is_single_prop) != 0 && i < 10 #独身の男たちがいる間は
        println(is_single_prop)
        for m in 1:m_size #男の数分全員考える
            if is_single_prop[m] #もしmが独身なら(1なら)
                f = m_prefs[m, next_resp[m]]  # 次求婚する女に求婚する
                if f == 0 # 次求婚する女がマッチングしなかった時の状態の女だったらつまり誰とも結婚したくなかったら
                    is_single_prop[m] = false # 独身とみなさない #Falseではダメ
                elseif (find(f_prefs[f, :] .== m) .< find(f_prefs[f, :].==current_prop[f])) == trues(1) # fに取ってmが今の彼氏よりもよかったら
                    if current_prop[f] != 0 # もしfに付き合っていた人がいたら
                        is_single_prop[current_prop[f]] = true#fのもと交際相手の男が独身になる
                    end
                    current_prop[f] = m # fの付き合っている人をmにする
                    is_single_prop[m] = false # mを独身でなくさせる
                end
                next_resp[m] += 1 # 次の求婚対象の女を次の順位の女にする
            end
        end
        i += 1
    end

    m_matched = Array(Int64,m_size)
    for m in 1:m_size
        m_matched[m]= m_prefs[m,next_resp[m]-1]
    end
    f_matched = current_prop
    
    return m_matched, f_matched
end


Out[4]:
deferred_acceptance (generic function with 1 method)

In [10]:
m_prefs = [2 1 3 4 0; 1 3 2 4 0; 2 3 4 1 0]'
f_prefs = [2 1 3 0; 3 2 1 0; 1 3 2 0; 2 3 1 0]'
println(m_prefs)
println(f_prefs)
println(deferred_acceptance(m_prefs, f_prefs))


[2 1 2
 1 3 3
 3 2 4
 4 4 1
 0 0 0]
[2 3 1 2
 1 2 3 3
 3 1 2 1
 0 0 0 0]
Bool[true,true,true]
Bool[true,false,false]
Bool[true,false,false]
([3,1,2],[2,3,1,0])

In [11]:
a = 3

if a < 2
    println("a<2")
elseif a < 3
    println("a<3")
else println("a>=3")
end


a>=3

In [18]:
function deferred_acceptance(m_prefs,f_prefs)
    m = size(m_prefs, 2)
    n = size(f_prefs, 2)
    m_matched=zeros(Int64,m)
    f_matched=zeros(Int64,n)
    m_counter=zeros(Int64,m) #ふられた回数をカウントする
    for d in 1:n+1 #全員のcounterがn+1に達するまでみたいな感じにした方がいい気がするけどやり方わからず
        for h in 1:m #1~m番までの男hに対して
            if m_matched[h] == 0 #男hが独身である場合
                
                if m_prefs[m_counter[h]+1,h]==0 #男hの選好で上からcounter番目が独身の時
                    m_matched[h] = 0 #もうこの人は独身で決定。

                #counter番目の選好が独身でなくちゃんと好きな人kがいるなら、その人にプロポーズする。
                
                #女kにとってhの選好が現在婚約している人より高いのであれば、婚約を破棄してhと婚約。
                elseif true
                    if f_matched[m_prefs[m_counter[h]+1,h]] != 0
                        m_matched[f_matched[m_prefs[m_counter[h]+1,h]]] = 0 #もともと婚約していた男は独身に
                        m_counter[f_matched[m_prefs[m_matched[h],h]]] += 1 #もともと婚約してた男のふられた回数カウンター増加。
                    end        
                    m_matched[h] = m_prefs[m_matched[h],h] #男hはcounter番目に好きな人と婚約
                    f_matched[m_prefs[m_matched[h],h]] = h #女kは男hと婚約
                else
                    #counter番目に好きな人kにとって男hの選好が現在婚約している人よりも低いとき、男hは独身のまま。hのふられた回数カウンター増加。
                    m_counter[h] += 1 
                end
                
            end
        end
    end
end


Out[18]:
deferred_acceptance (generic function with 2 methods)

In [ ]: