Plus longue série
Fait partie de la section Logique et Flux du Journey Swift de Coddy. Leçon 35 sur 56.
Une série est une suite de jours consécutifs pendant lesquels une habitude a été marquée comme effectuée. Pour les jours [1, 2, 3, 5, 6], la plus longue série est de 3 jours (jours 1 à 3).
Une fois que tu disposes d’une liste de jours triée, le calcul consiste en un simple parcours linéaire : compare chaque jour au précédent, prolonge la série actuelle lorsqu’ils sont consécutifs, sinon réinitialise-la.
func longestStreak(_ days: [Int]) -> Int {
let sorted = days.sorted()
var best = 0
var run = 0
var prev: Int? = nil
for d in sorted {
if let p = prev, d == p + 1 {
run += 1
} else {
run = 1
}
if run > best { best = run }
prev = d
}
return best
}Le schéma « suivre la série actuelle + la meilleure jusqu’à présent » revient dans de nombreux problèmes. Reconnais-le une fois, et il sera à toi pour toujours.
Défi
MoyenLisez une seule ligne d’entrée : une liste d’entrées habit:day séparées par des virgules. Construisez le même dictionnaire que dans la leçon précédente, puis calculez, pour chaque habitude, la plus longue série de jours consécutifs au cours de la semaine.
Affichez les habitudes dans l’ordre alphabétique, une par ligne, au format :
<habit>: streak=<n>Pour l’entrée read:1,read:2,read:3,read:5,workout:2,workout:4, la sortie est :
read: streak=3
workout: streak=1Essayez vous-même
var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
for op in ops {
let parts = op.components(separatedBy: ":")
let day = Int(parts[1])!
if !(habits[parts[0], default: []].contains(day)) {
habits[parts[0], default: []].append(day)
}
}
// TODO: plus longue série par habitude, afficher trié par nom comme 'name: streak=n'
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de motsEntraînez-vous par vous-même : Playground Swift