Marcar como Concluído
Parte da seção Lógica e Fluxo do Journey de Swift da Coddy — lição 34 de 56.
A primeira funcionalidade: processar uma lista de ações do tipo "marcar este hábito como concluído neste dia" e produzir um estado final.
Cada linha de entrada é uma operação no formato habit:day onde day está entre 1 e 7. Se o hábito ainda não existir, crie-o com um array vazio e, em seguida, adicione o dia. Se um dia já estiver registrado para esse hábito, não o registre duas vezes.
Você utilizará o padrão de subscrito com valor padrão do capítulo de dicionários: habits[name, default: []].append(day) funciona quer a chave exista ou não.
Desafio
FácilLeia uma única linha de entrada: uma lista de entradas habit:day separadas por vírgula (ex: read:1,read:3,workout:2). Após aplicar cada operação, imprima os hábitos em ordem alfabética, um por linha, no formato:
<habit>: <days_sorted_ascending_joined_with_comma>Ignore pares habit:day duplicados.
Para a entrada read:1,read:3,workout:2,read:1,read:5,workout:4, a saída é:
read: 1,3,5
workout: 2,4Folha de consulta
Use o padrão de subscrito padrão (default-subscript) para anexar a um dicionário de arrays, criando a chave se ela não existir:
var habits: [String: [Int]] = [:]
habits[name, default: []].append(day)
Para evitar duplicatas, verifique antes de anexar:
if !habits[name, default: []].contains(day) {
habits[name, default: []].append(day)
}
Experimente você mesmo
var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
// TODO: para cada op, analise nome:dia, adicione o dia se ainda não estiver lá;
// depois imprima os hábitos em ordem alfabética com os dias ordenados
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