# ---------- 1. Simpangan baku tanpa sd ----------
simpangan_baku <- function(x) {
  n <- length(x)
  jumlah <- 0
  for (v in x) jumlah <- jumlah + v
  rata <- jumlah / n
  jkw <- 0
  for (v in x) jkw <- jkw + (v - rata)^2
  sqrt(jkw / (n - 1))
}

# ---------- 2. Indeks kemunculan terakhir nilai maksimum ----------
cari_idx_maks_terakhir <- function(A) {
  idx <- 1
  for (i in seq_along(A)[-1]) {
    if (A[i] >= A[idx]) idx <- i   # sebelumnya: >
  }
  idx
}

# ---------- 3. Maks dan min dalam satu traversal ----------
maks_min_sekaligus <- function(A) {
  maks <- A[1]; mn <- A[1]; banding <- 0
  for (i in seq_along(A)[-1]) {
    banding <- banding + 1
    if (A[i] > maks) {
      maks <- A[i]
    } else {
      banding <- banding + 1
      if (A[i] < mn) mn <- A[i]
    }
  }
  list(maks = maks, min = mn, banding = banding)
}

# ---------- 4. Kenaikan harian terbesar DAX ----------
kenaikan_terbesar <- function(dax) {
  n <- length(dax)
  terbesar <- dax[2] - dax[1]
  hari <- 2
  for (i in 3:n) {
    sel <- dax[i] - dax[i - 1]
    if (sel > terbesar) {
      terbesar <- sel
      hari <- i
    }
  }
  list(hari = hari, kenaikan = terbesar)
}

# ---------- 5. Jumlah & rata-rata per kolom ----------
jumlah_rata_kolom <- function(M) {
  baris <- nrow(M); kolom <- ncol(M)
  jml <- numeric(kolom); rata <- numeric(kolom)
  for (j in 1:kolom) {
    for (i in 1:baris) jml[j] <- jml[j] + M[i, j]
    rata[j] <- jml[j] / baris
  }
  minggu_maks <- 1
  for (j in 2:kolom) if (jml[j] > jml[minggu_maks]) minggu_maks <- j
  list(jumlah = jml, rata = rata, minggu_maks = minggu_maks)
}

# ======================= JALANKAN =======================
cat("=== 1. Simpangan baku ===\n")
## === 1. Simpangan baku ===
nilai <- c(70, 85, 60, 90, 75)     # GANTI dengan data UTS contoh 1.2
print(simpangan_baku(nilai))
## [1] 11.93734
cat("\n=== 2. Kemunculan terakhir maksimum ===\n")
## 
## === 2. Kemunculan terakhir maksimum ===
print(cari_idx_maks_terakhir(c(3, 7, 2, 7)))
## [1] 4
cat("\n=== 3. MaksMinSekaligus ===\n")
## 
## === 3. MaksMinSekaligus ===
A <- c(5, 4, 3, 2, 1)              # kasus terburuk (menurun)
print(maks_min_sekaligus(A))
## $maks
## [1] 5
## 
## $min
## [1] 1
## 
## $banding
## [1] 8
cat("2n - 2 =", 2 * length(A) - 2, "\n")
## 2n - 2 = 8
cat("\n=== 4. Kenaikan harian terbesar DAX ===\n")
## 
## === 4. Kenaikan harian terbesar DAX ===
data(EuStockMarkets)
dax <- EuStockMarkets[, "DAX"]
hasil <- kenaikan_terbesar(dax)
cat("Hari ke-", hasil$hari, "kenaikan:", hasil$kenaikan, "\n")
## Hari ke- 1653 kenaikan: 160.97
d <- diff(dax)                     # cara ringkas, hasil harus sama
cat("Cek diff: hari ke-", which.max(d) + 1, "kenaikan:", max(d), "\n")
## Cek diff: hari ke- 1653 kenaikan: 160.97
cat("\n=== 5. Matriks penjualan 3 toko x 4 minggu ===\n")
## 
## === 5. Matriks penjualan 3 toko x 4 minggu ===
M <- matrix(c(12, 15, 9, 20,
              10, 14, 11, 18,
              13, 16, 10, 22), nrow = 3, byrow = TRUE)   # GANTI dengan data Anda
h <- jumlah_rata_kolom(M)
print(h)
## $jumlah
## [1] 35 45 30 60
## 
## $rata
## [1] 11.66667 15.00000 10.00000 20.00000
## 
## $minggu_maks
## [1] 4
cat("Cek: colSums =", colSums(M), "| colMeans =", colMeans(M), "\n")
## Cek: colSums = 35 45 30 60 | colMeans = 11.66667 15 10 20
cat("\n=== 6. Padanan [[0]*3]*3 di R ===\n")
## 
## === 6. Padanan [[0]*3]*3 di R ===
m <- matrix(0, nrow = 3, ncol = 3)
m[1, 1] <- 99
print(m)                           # hanya [1,1] yang berubah
##      [,1] [,2] [,3]
## [1,]   99    0    0
## [2,]    0    0    0
## [3,]    0    0    0
l <- rep(list(c(0, 0, 0)), 3)
l[[1]][1] <- 99
print(l)                           # hanya list pertama yang berubah
## [[1]]
## [1] 99  0  0
## 
## [[2]]
## [1] 0 0 0
## 
## [[3]]
## [1] 0 0 0