﻿rm(list = ls())  # ワークスペースをクリア
n <- 300000  # 試行回数
# A, B, C, Dの4人とも自分の名刺が入った封筒を選んだ状態
individual_cards <- c('card_A', 'card_B', 'card_C', 'card_D')  
# ベクトルxには，全員が他人の名刺が入った封筒を選んだ場合は1を格納し，
# そうでない場合は0を格納する．
x <- numeric(n)  # 初期状態では，xはn次元零ベクトル
set.seed(1)  # 乱数のシード値を固定
for (i in 1:n) {
  # カードを無作為に4枚選ぶ
  selected_cards <- sample(individual_cards, 4, replace=FALSE)
  # 全員が他人の名刺が入った封筒を選んだ場合
  if (all(selected_cards != individual_cards)) {
    x[i] <- 1  # 第i成分を0から1に変更
  }
}
# 確率の表示
sum(x == 1) / n  # モンテカルロ法
3/8  # 参考：理論値