Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Średni

Wczytaj 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...| 2

Spró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>'
quiz iconSprawdź się

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

Poćwicz samodzielnie: Edytor online Swift