Menu
Coddy logo textTech

Grille hebdomadaire

Fait partie de la section Logique et Flux du Journey Swift de Coddy. Leçon 36 sur 56.

Il est temps d'afficher le calendrier. Pour chaque habitude, générez une grille de sept caractères avec un X pour les jours effectués et un . ailleurs.

// days = [1, 3, 5]
// rendu : X.X.X..

Astuce utile : construisez la grille sous forme d'un tableau de caractères, puis transformez-le en String une seule fois.

var slots = Array(repeating: ".", count: 7)
for d in days {
    slots[d - 1] = "X"
}
let row = slots.joined()

days est indexé à partir de 1 (Mon = 1) mais les tableaux Swift sont indexés à partir de 0, donc soustrayez 1 lors de l'assignation. Des jours hors plage provoqueraient un plantage, donc faites confiance au format d'entrée.

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 dictionnaire comme précédemment, puis affichez une ligne par habitude (triée par ordre alphabétique) au format :

<habit> |<grid>| <count>

grid est la chaîne de sept caractères X/. et count est le nombre de jours uniques effectués pour cette habitude.

Pour l'entrée read:1,read:3,read:5,workout:2,workout:4, la sortie est :

read |X.X.X..| 3
workout |.X.X...| 2

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: construire une grille de 7 emplacements pour chaque habitude ; afficher '<nom> |<grille>| <compte>'
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