Menu
Coddy logo textTech

Sınıf Raporu

Coddy'nin R Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 25 / 64.

challenge icon

Görev

Kolay

REPORT komutunu ekle. Önceki adımlardaki her komutun tam olarak daha önceki gibi çalışmaya devam etmesini sağla.

  • REPORT: Saklanan her öğrenci için alfabetik sırayla, AVG yanıtı gibi biçimlendirilmiş bir satırla yanıt ver (ada: 88.8 veya bo: no grades). Ardından, Class average: satırını, her öğrencinin kaydedilmiş tüm notlarının ortalamasını tek ondalık basamakla gösterecek şekilde ekle; hiçbir şey kaydedilmemişse no grades kullan.

Tek bir REPORT komutu birden fazla yanıt üretir ve her yanıt kendi satırına yazdırılır.

Sağlanan kod, her giriş satırını tek bir komut olarak gradebook() işlevine iletir ve döndürülen her yanıtı kendi satırına yazdırır. Bir ad, küçük harflerden oluşan tek bir kelimedir ve girdi yalnızca şimdiye kadar açıklanan komutları içerir.

Kendin dene

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
}

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi