Cuadrícula semanal
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 36 de 56.
Es hora de imprimir el calendario. Para cada hábito, renderiza una cuadrícula de siete caracteres con X en los días completados y . en el resto.
// days = [1, 3, 5]
// renderiza: X.X.X..Modismo útil: construye la cuadrícula como un array de caracteres, luego conviértelo a String una sola vez.
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()days está indexado en 1 (Lun = 1), pero los arrays de Swift están indexados en 0, así que resta 1 al asignar. Los días fuera de rango provocarían un error, así que confía en el formato de entrada.
Desafío
IntermedioLee una sola línea de entrada: una lista separada por comas de entradas habit:day. Construye el diccionario como antes, luego imprime una línea por hábito (ordenados alfabéticamente) en el formato:
<habit> |<grid>| <count>donde grid es la cadena de siete caracteres X/. y count es el número de días únicos completados para ese hábito.
Para la entrada read:1,read:3,read:5,workout:2,workout:4, la salida es:
read |X.X.X..| 3
workout |.X.X...| 2Hoja de referencia
Crea una cuadrícula de 7 caracteres con X en los días completados y . en el resto (los días tienen índice 1):
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()Pruébalo tú mismo
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: construir una cuadrícula de 7 espacios para cada hábito; imprimir '<nombre> |<cuadrícula>| <conteo>'
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras