# パッケージがインストール済なら次の行は不要
# import Pkg; Pkg.add("Distributions")
using Distributions
import Random  # 乱数を扱うためのモジュールをインポート
n = 100000  # 試行回数
a = 100
b = 30
Random.seed!(1)  # 乱数のシード値を固定
x = rand(Uniform(0, a), n)  # U(0,a)に従う乱数をn個生成
y = rand(Uniform(0, a), n)  # U(0,a)に従う乱数をn個生成
u = min.(x, y)
v = max.(x, y)
z = [rand(Uniform(_x, a)) for _x in x]  # U(x,a)に従う乱数をn個生成
# (1) 確率を表示 (※モンテカルロ法で求めた値，理論値の順)
println(mean(abs.(x - y) .<= b))
println(1 - (a - b)^2 / a^2)
# (2) 確率を表示 (※モンテカルロ法で求めた値，理論値の順) 
println(mean((u .< a/2) .& (v .< u .+ a/2) .& (a/2 .< v)))
println(1/4)
# (3) 確率を表示 (※モンテカルロ法で求めた値，理論値の順)
println(mean((x .> b) .& (a .- z .> b)))
println((a - 2 * b) / a + b / a * log(b / (a - b)))