Menu
Coddy logo textTech

En Başarılı Öğrenci

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

challenge icon

Görev

Orta

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

  • TOP: en yüksek ortalamaya sahip öğrenciyi ve köşeli parantez içinde bir ondalık basamakla gösterilen ortalamasını, ardından Top: gelecek şekilde yanıtla; örneğin Top: ada (92.0). Notu olmayan öğrenciler atlanır. Ortalamalar eşitse, adı alfabetik olarak önce gelen öğrenciyi seç. Hiçbir öğrencinin notu olmadığında Top: none yanıtını ver.

Sağlanan kod, her giriş satırını tek bir komut olarak gradebook() işlevine aktarır ve döndürülen her yanıtı kendi satırına yazdırır. Bir ad, küçük harflerden oluşan tek bir sözcüktür 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]])))
      }
    } else if (parts[1] == "REPORT") {
      for (student in sort(names(grades))) {
        replies <- c(replies, paste0(student, ": ", average_text(grades[[student]])))
      }
      replies <- c(replies, paste("Class average:", average_text(unlist(grades))))
    }
  }
  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