Еженедельная сетка
Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 36 из 56.
Пришло время вывести календарь. Для каждой привычки отрисуйте сетку из семи символов с X для выполненных дней и . для остальных.
// days = [1, 3, 5]
// отрисовывает: X.X.X..Полезный прием: создайте сетку как массив символов, а затем преобразуйте её в String один раз.
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()days использует индексацию с единицы (Пн = 1), но массивы Swift используют индексацию с нуля, поэтому вычитайте 1 при присваивании. Значения дней вне допустимого диапазона приведут к сбою, поэтому полагайтесь на формат входных данных.
Задание
СреднеПрочитайте одну строку ввода: список записей habit:day, разделенных запятыми. Создайте словарь, как и раньше, затем выведите по одной строке для каждой привычки (отсортированной по алфавиту) в формате:
<habit> |<grid>| <count>где grid — это семисимвольная строка из X/., а count — количество уникальных дней выполнения этой привычки.
Для ввода read:1,read:3,read:5,workout:2,workout:4 вывод будет следующим:
read |X.X.X..| 3
workout |.X.X...| 2Шпаргалка
Создайте сетку из 7 символов с X в выполненные дни и . в остальных местах (дни индексируются с 1):
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()Попробуйте сами
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: построить сетку из 7 слотов для каждой привычки; вывести '<name> |<grid>| <count>'
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря