Programador de eventos
Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 56 de 57.
Desafío
DifícilConstruye un programador de eventos con los protocolos estándar. Event es una estructura con title, day (1-31), y las horas start y end. Es Comparable (por día, después por inicio y después por título), Hashable y Equatable únicamente según el título y el día (el mismo evento introducido dos veces), y CustomStringConvertible como day 3 09-11 standup. La clase Scheduler tiene add(_:), que devuelve added, duplicate (el mismo título en el mismo día) o conflicts with <title> (un evento existente en ese día cuyas horas se solapan: uno comienza antes de que termine el otro). agenda() devuelve los eventos ordenados, y busiestDay() devuelve busiest day 3: 5h o no events.
El código proporcionado lee los eventos como líneas con el formato title,day,start,end e imprime la respuesta para cada uno, después la agenda (un evento por línea) y el día con más actividad.
Tu código debe ir en Event.swift y Scheduler.swift. main.swift contiene el código proporcionado de entrada y salida y no se puede editar.
Pruébalo tú mismo
// Código de entrada/salida suministrado: déjalo tal 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 las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesMétodos y selfInicializadoresLas clases son referenciasRepaso: tarjeta de biblioteca4Encapsulación
Control de accesoSolo lectura desde fueraProtección del estadoInicializadores que pueden fallarRepaso - Cuenta bancaria7Polimorfismo y genéricos
PolimorfismoConversión de tiposFunciones genéricasTipos genéricosRepaso - Calculadora de formas2Structs y tipos por valor
StructsSemántica de valoresMétodos mutablesStruct o claseRepaso - elemento del inventario5Herencia
SubclasesSobrescritura de métodosInicializadores y superfinal y jerarquíasRepaso: jerarquía de empleados8Protocolos estándar
CustomStringConvertibleEquatableComparableHashableRepaso - Ordenamiento personalizado11Proyecto: Gestión de bibliotecas
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Swift