Menu
CoddyTech

Laporan Kelas

Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 25 dari 64.

challenge icon

Tantangan

Mudah

Tambahkan perintah REPORT. Pastikan setiap perintah dari langkah sebelumnya tetap berfungsi persis seperti sebelumnya.

  • REPORT: balas dengan satu baris untuk setiap siswa yang tersimpan, dalam urutan alfabetis, dengan format seperti balasan untuk AVG (ada: 88.8 atau bo: no grades). Lalu tambahkan baris Class average: diikuti rata-rata semua nilai yang tercatat dari setiap siswa dengan satu angka desimal, atau no grades jika belum ada nilai yang tercatat.

Satu perintah REPORT menghasilkan beberapa balasan, dan setiap balasan dicetak pada barisnya sendiri.

Kode yang disediakan meneruskan setiap baris input ke gradebook() sebagai satu perintah dan mencetak setiap balasan yang dikembalikan pada barisnya sendiri. Nama terdiri dari satu kata berhuruf kecil, dan input hanya berisi perintah yang telah dijelaskan sejauh ini.

Coba sendiri

average_text <- function(scores) {
  if (length(scores) == 0) "no grades" else sprintf("%.1f", mean(scores))
}

gradebook <- function(commands) {
  grades <- list()
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    name <- parts[2]
    if (parts[1] == "ADD") {
      if (name %in% names(grades)) {
        replies <- c(replies, paste(name, "already exists"))
      } else {
        grades[[name]] <- numeric(0)
        replies <- c(replies, paste("added", name))
      }
    } else if (parts[1] == "GRADE") {
      if (!(name %in% names(grades))) {
        replies <- c(replies, paste("no student", name))
      } else {
        score <- as.numeric(parts[3])
        grades[[name]] <- c(grades[[name]], score)
        replies <- c(replies, paste("recorded", score, "for", name))
      }
    } else if (parts[1] == "AVG") {
      if (!(name %in% names(grades))) {
        replies <- c(replies, paste("no student", name))
      } else {
        replies <- c(replies, paste0(name, ": ", average_text(grades[[name]])))
      }
    }
  }
  replies
}

# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler R online