Grade Semanal
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 36 de 56.
É hora de imprimir o calendário. Para cada hábito, renderize uma grade de sete caracteres com X nos dias concluídos e . nos demais.
// days = [1, 3, 5]
// renderiza: X.X.X..Expressão útil: construa a grade como um array de caracteres e, em seguida, transforme-a em String de uma só vez.
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()days é indexado em 1 (Seg = 1), mas os arrays Swift são indexados em 0, então subtraia 1 ao atribuir. Dias fora do intervalo causariam erro, então confie no formato de entrada.
Desafio
MédioLeia uma única linha de entrada: uma lista separada por vírgulas de entradas habit:day. Construa o dicionário como antes e, em seguida, imprima uma linha por hábito (ordenada alfabeticamente) no formato:
<habit> |<grid>| <count>onde grid é a string de sete caracteres composta por X/. e count é o número de dias únicos concluídos para esse hábito.
Para a entrada read:1,read:3,read:5,workout:2,workout:4, a saída é:
read |X.X.X..| 3
workout |.X.X...| 2Folha de consulta
Crie uma grade de 7 caracteres com X nos dias concluídos e . nos demais (os dias são indexados em 1):
var slots = Array(repeating: ".", count: 7)
for d in days {
slots[d - 1] = "X"
}
let row = slots.joined()Experimente você mesmo
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 uma grade de 7 espaços para cada hábito; imprimir '<nome> |<grade>| <contagem>'
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings a Fundo
Contagem e ÍndicesCase e TrimBusca em StringsDivisão e JunçãoSubstituindo SubstringsRecapitulação - Verificação de Nome de Usuário4Conjuntos
Criando ConjuntosUnião e InterseçãoSubtração e Diferença SimétricaSubconjunto e SuperconjuntoRecapitulação - Filtro de Tags7Projeto - Monitor de Hábitos
Visão Geral do ProjetoMarcar como Concluído10Projeto - Mecanismo de Quiz
Visão Geral do ProjetoFazer Perguntas2Intervalos e Strides
Fechado vs Meio-AbertoStrideMétodos de IntervaloIntervalos no SwitchRecapitulação - Grade de Calendário5Funções de Ordem Superior Parte 1
MapFilterReduceEncadeando map, filter, reduceRecapitulação - Estatísticas de Palavras