# Pembahasan enam latihan pertemuan 11 ----

lat_x <- c(12, 7, 19, 7, 25)


# 11A Sequential Boolean posisi pertama 7.

seq_boolean <- function(data, target) {
  if (anyNA(data)) {
    stop("Data tidak boleh mengandung NA")
  }

  i <- 1
  ketemu <- FALSE

  while (i <= length(data) && !ketemu) {
    if (data[i] == target) {
      ketemu <- TRUE
    } else {
      i <- i + 1
    }
  }

  if (ketemu) return(i)
  return(0)
}

print(seq_boolean(lat_x, 7))
## [1] 2
# 11B Tanpa Boolean target tidak ada dan larik kosong.

seq_tanpa_boolean <- function(data, target) {
  if (anyNA(data)) {
    stop("Data tidak boleh mengandung NA")
  }

  i <- 1

  while (i <= length(data) && data[i] != target) {
    i <- i + 1
  }

  if (i <= length(data)) return(i)
  return(0)
}

print(seq_tanpa_boolean(lat_x, 8))
## [1] 0
print(seq_tanpa_boolean(numeric(), 8))
## [1] 0
# 11C Terurut berhenti ketika nilai melebihi target.

seq_terurut <- function(data, target) {
  if (anyNA(data)) {
    stop("Data tidak boleh mengandung NA")
  }

  i <- 1

  while (i <= length(data) && data[i] < target) {
    i <- i + 1
  }

  if (i <= length(data) && data[i] == target) {
    return(i)
  }

  return(0)
}

print(seq_terurut(c(5, 10, 15, 20, 25), 12))
## [1] 0
# 11D Sentinel dan keutuhan data asli.

seq_sentinel <- function(data, target) {
  if (anyNA(data)) {
    stop("Data tidak boleh mengandung NA")
  }

  data_baru <- c(data, target)
  i <- 1

  while (data_baru[i] != target) {
    i <- i + 1
  }

  if (i <= length(data)) return(i)
  return(0)
}

lat_awal <- lat_x

print(seq_sentinel(lat_x, 99))
## [1] 0
print(identical(lat_x, lat_awal))
## [1] TRUE
# 11E Posisi pertama berbeda dengan semua posisi.

print(match(7, lat_x))
## [1] 2
print(which(lat_x == 7))
## [1] 2 4
# 11F Data tidak sah ditolak dan pesan ditangkap.

print(
  tryCatch(
    seq_boolean(c(12, NA, 19), 19),
    error = function(e) conditionMessage(e)
  )
)
## [1] "Data tidak boleh mengandung NA"