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.
Défi
MoyenLisez 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>où 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...| 2Aide-mémoire
Construisez une grille de 7 caractères avec X sur les jours terminés et . ailleurs (les jours sont indexés à partir de 1) :
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()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>'
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 mots