# 1. Buat simulasi untuk distribusi diskrit dan distribusi kontinu.
# Dist. Binomial (Diskrit) : Melempar koin 1000 kali 
percobaan <- 1000  # Jumlah percobaan
n <- 10 # Jumlah pelemparan koin dalam satu percobaan
p_angka <- 0.5  # Probabilitas dapat angka
data_binom <- rbinom(percobaan, size = n, prob = p_angka)

# Plot histogram
hist(data_binom, breaks = 30, main = "Histogram Distribusi Binomial", xlab = "Jumlah Angka", col = "brown")

# Dist. Normal (Kontinu) : 
m_tinggi <- 165    # Rata-rata tinggi badan (cm)
sd_tinggi <- 10       # Standar deviasi tinggi badan (cm)
n <- 1000    # Jumlah mahasiswa yang disimulasi
data_norm <- rnorm(n, mean = m_tinggi, sd = sd_tinggi)

# Plot histogram
hist(data_norm, breaks = 10, main = "Histogram Distribusi Normal", xlab = "Tinggi Badan (cm)", col = "red")

# 2. Buat studi kasus sendiri yang melibatkan simulasi variabel random dari distribusi yang telah dipelajari.

# Dist. Seragam (Diskrit) : Sebuah kedai kopi kecil bernama "Kopi Nusantara" baru saja dibuka. Berdasarkan pengamatan pemiliknya, pelanggan datang secara acak sepanjang jam operasional, terutama di pagi hari. Asumsinya, kedatangan pelanggan terdistribusi secara seragam antara pukul 07.00 hingga 09.00 WIB. Artinya, peluang seorang pelanggan datang di setiap menit antara jam 7-9 adalah sama. Pemiliknya melakukan simulasi selama 30 hari untuk memperkirakan berbagai skenario dan membantu pengambilan keputusan operasional.

set.seed(1)
n <- 30   # simulasi 30 hari
waktu_min <- 0  # pukul 07.00 (0 menit)
waktu_maks <- 120 # pukul 09.00 (120 menit)

# Membangkitkan data dari distribusi seragam
data_waktu <- runif(n, min = waktu_min, max = waktu_maks)
data_waktu
##  [1]  31.861040  44.654868  68.742404 108.984935  24.201832 107.806762
##  [7] 113.361032  79.295735  75.493685   7.414352  24.716949  21.186810
## [13]  82.442742  46.092446  92.380970  59.723909  86.114221 119.028731
## [19]  45.604222  93.293427 112.164628  25.457103  78.200852  15.066612
## [25]  32.066480  46.333691   1.606840  45.886555 104.362901  40.841880
# Buat simulasi jam kedatangan pelanggan
menit_ke_jam <- function(menit) {
  jam <- 7 + floor(menit / 60)
  menit_sisa <- floor(menit %% 60)
  sprintf("%02d:%02d", jam, menit_sisa)
}

waktu_datang <- sapply(data_waktu, menit_ke_jam)
waktu_datang
##  [1] "07:31" "07:44" "08:08" "08:48" "07:24" "08:47" "08:53" "08:19" "08:15"
## [10] "07:07" "07:24" "07:21" "08:22" "07:46" "08:32" "07:59" "08:26" "08:59"
## [19] "07:45" "08:33" "08:52" "07:25" "08:18" "07:15" "07:32" "07:46" "07:01"
## [28] "07:45" "08:44" "07:40"
# 1. Rata-rata waktu kedatangan simulasi (dalam menit setelah jam 7)
round(mean(data_waktu),2)
## [1] 61.15
# 2. Peluang pelanggan datang di jam sibuk (07.30 - 08.30)
round(sum(data_waktu >= 30 & data_waktu <= 90) / n, 4)
## [1] 0.5
# 3. Visualisasi distribusi waktu kedatangan
hist(data_waktu, 
     col = "skyblue", 
     main = "Distribusi Waktu Kedatangan Pelanggan (30 Hari)",
     xlab = "Waktu (menit setelah jam 07.00)",
     ylab = "Frekuensi",
     xlim = c(0, 120))

# 4. Berapa nilai kepadatan peluang (PDF) pada menit ke-60 (pukul 08.00)? Gunakan fungsi dunif(x, min, max) untuk menghitung tinggi fungsi kepadatan peluang pada suatu titik x
dunif(60, min = waktu_min, max = waktu_maks)
## [1] 0.008333333
# 5. Berapa peluang seorang pelanggan datang setelah pukul 8.30? Gunakan fungsi punif(q, min, max) memberikan peluang bahwa variabel acak kurang dari atau sama dengan q
1 - punif(90, min = 0, max = 120) 
## [1] 0.25
# 3. Pemilik ingin memberikan promosi "Early Bird" untuk 30% pelanggan yang datang paling awal. 30% pelanggan pertama datang sebelum menit ke? Gunakan fungsi qunif(p, min, max) untuk mencari nilai x (waktu) yang sesuai dengan peluang kumulatif tertentu
qunif(0.3, min = 0, max = 120)
## [1] 36