Tygodniowa siatka
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 36 z 56.
Czas wydrukować kalendarz. Dla każdego nawyku wyświetl siatkę złożoną z siedmiu znaków, używając X w dniach, w których nawyk został wykonany, i . w pozostałe dni.
// days = [1, 3, 5]
// renderuje: X.X.X..Przydatny idiom: zbuduj siatkę jako tablicę znaków, a następnie zamień ją na String tylko raz.
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()days jest indeksowane od 1 (pon. = 1), ale tablice w Swift są indeksowane od 0, więc przy przypisywaniu odejmij 1. Dni spoza zakresu spowodowałyby awarię, więc zaufaj formatowi danych wejściowych.
Wyzwanie
ŚredniWczytaj jeden wiersz danych wejściowych: listę wpisów habit:day oddzielonych przecinkami. Zbuduj słownik jak poprzednio, a następnie wypisz po jednym wierszu dla każdego nawyku (posortowanego alfabetycznie) w formacie:
<habit> |<grid>| <count>gdzie grid to siedmioznakowy ciąg X/., a count to liczba unikalnych dni, w których wykonano dany nawyk.
Dla danych wejściowych read:1,read:3,read:5,workout:2,workout:4 wynikiem jest:
read |X.X.X..| 3
workout |.X.X...| 2Spróbuj swoich sił
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: utwórz siatkę z 7 polami dla każdego nawyku; wypisz '<name> |<grid>| <count>'
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słówPoćwicz samodzielnie: Edytor online Swift