Agendador de Eventos
Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 56 de 57.
Desafio
DifícilCrie um agendador de eventos com os protocolos padrão. Event é uma struct com title, day (1-31), e os horários de start e end. Ela é Comparable (por dia, depois por início e, por fim, por título), Hashable e Equatable considerando apenas título e dia (o mesmo evento inserido duas vezes), e CustomStringConvertible como day 3 09-11 standup. A classe Scheduler tem add(_:), que retorna added, duplicate (mesmo título no mesmo dia) ou conflicts with <title> (um evento existente nesse dia cujos horários se sobrepõem: um começa antes de o outro terminar). agenda() retorna os eventos ordenados, e busiestDay() retorna busiest day 3: 5h ou no events.
O código fornecido lê os eventos em linhas no formato title,day,start,end e imprime a resposta para cada um, depois a agenda (um evento por linha) e o dia mais movimentado.
Seu código deve estar em Event.swift e Scheduler.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
// Código de entrada/saída fornecido: mantenha-o como está
var input: [String] = []
while let line = readLine() { input.append(line) }
let scheduler = Scheduler()
for line in input {
let p = line.split(separator: ",").map(String.init)
print(scheduler.add(Event(title: p[0], day: Int(p[1])!, start: Int(p[2])!, end: Int(p[3])!)))
}
for e in scheduler.agenda() { print(e) }
print(scheduler.busiestDay())
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesMétodos e selfInicializadoresClasses são ReferênciasRevisão - Cartão da Biblioteca4Encapsulamento
Controle de AcessoSomente Leitura ExternaProtegendo o EstadoInicializadores que Podem FalharRevisão - Conta Bancária7Polimorfismo e Genéricos
PolimorfismoConversão de TiposFunções GenéricasTipos GenéricosRevisão - Calculadora de Formas2Structs e Tipos de Valor
StructsSemântica de ValorMétodos MutáveisStruct ou ClasseRecapitulação - Item de Inventário5Herança
SubclassesSobrescrita de métodosInicializadores e superfinal e hierarquiasRecapitulação - Hierarquia de funcionários8Protocolos Padrão
CustomStringConvertibleEquatableComparableHashableRecapitulação - Ordenação Personalizada11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Swift