Menu
Coddy logo textTech

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.

challenge icon

Défi

Moyen

Lisez 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=1

Essayez 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'
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Swift