Menu
Coddy logo textTech

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.

challenge icon

Desafio

Médio

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

Folha 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>'
quiz iconTeste seus conhecimentos

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