Menu
Coddy logo textTech

Bilan de la classe

Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 25 sur 64.

challenge icon

Défi

Facile

Ajoute la commande REPORT. Garde toutes les commandes des étapes précédentes opérationnelles exactement comme avant.

  • REPORT : réponds avec une ligne par étudiant enregistré, dans l’ordre alphabétique, au même format que la réponse à AVG (ada: 88.8 ou bo: no grades). Ajoute ensuite la ligne Class average: suivie de la moyenne de toutes les notes enregistrées de tous les étudiants, avec une décimale, ou no grades si aucune note n’a été enregistrée.

Une commande REPORT produit plusieurs réponses, et chacune est affichée sur sa propre ligne.

Le code fourni transmet chaque ligne d’entrée à gradebook() comme une commande unique et affiche chaque réponse renvoyée sur sa propre ligne. Un nom est un mot en minuscules, et l’entrée contient uniquement les commandes décrites jusqu’à présent.

Essayez vous-même

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
}

# Code d'entrée/sortie fourni : le garder tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur R en ligne