using Random　# 乱数を扱うためのモジュールをインポート
n = 100000  # 試行回数
k = 3  # 扉の枚数 (k枚の扉は1,2,...,kと表す)
n_sw = 0  # スイッチしたときの当選回数
Random.seed!(1)  # 乱数のシード値を固定
for i in 1:n
    true_prize = rand(1:k)  # 商品が隠された扉
    original_choice = rand(1:k)  # 挑戦者が最初に選ぶ扉
    index_vec = collect(1:k)
    # 挑戦者が最初に当たりを選んだ場合
    if original_choice == true_prize
        # index_vec(k次元)からoriginal_choiceを除く
        index_vec = setdiff(index_vec, [original_choice])
        # index_vec((k-1)次元)の中から無作為に1つを選ぶ
        unopened_vec = rand(index_vec)
        # unopened_vec = 閉めたままの2つの扉
        unopened_vec = vcat(unopened_vec, [original_choice])
    else  # 挑戦者が最初にはずれを選んだ場合
        # unopened_vec = 最初に選んだ扉と当たりの扉
        unopened_vec = [original_choice, true_prize]
    end
    # スイッチした後の扉
    the_other_unopened = setdiff(unopened_vec, [original_choice])
    if the_other_unopened[1] == true_prize  # スイッチした後の扉が当たり
        n_sw += 1
    end
end
# スイッチして当選する確率を表示
println( n_sw / n )  # モンテカルロ
println( (k - 1) / k )  # 参考：理論値