Agregador de logs
Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 55 de 56.
Desafío
IntermedioEstás procesando registros de acceso. Lee una sola línea de entrada: una lista separada por comas de entradas level:user:bytes.
Algunas entradas son incorrectas y deben omitirse: cualquier entrada cuyos bytes no puedan ser analizados como un entero, o cuyo level no sea uno de INFO, WARN, ERROR (sensible a mayúsculas).
Imprime, en este orden:
- Una línea por cada nivel que haya aparecido al menos una vez, ordenada en este orden fijo:
ERROR,WARN,INFO. Cada línea es<level>: <count> (<bytes>)dondecountes el número de entradas válidas en ese nivel ybyteses la suma de sus bytes. Top user: <name> (<bytes>): el usuario con la mayor cantidad total de bytes en todas las entradas válidas. Rompe los empates alfabéticamente por nombre.Skipped: <n>con el recuento de entradas malformadas.
Para la entrada INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75, la salida es:
ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2Pruébalo tú mismo
let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]
// TODO: analizar cada entrada, descartar las incorrectas, acumular por nivel + por usuario;
// imprimir niveles en orden fijo (solo si se encuentran), el usuario principal, luego el recuento de omitidos
Todas las lecciones de Lógica y Flujo
1Strings a fondo
Conteo e índicesMayúsculas, minúsculas y TrimBúsqueda en StringsDividir y unirReemplazo de subcadenasResumen: Validación de usuario4Conjuntos
Crear conjuntosUnión e intersecciónResta y diferencia simétricaSubconjunto y superconjuntoResumen - Filtro de etiquetas7Proyecto - Seguimiento de hábitos
Descripción general del proyectoMarcar como completado10Proyecto - Motor de cuestionarios
Descripción general del proyectoHacer preguntas2Rangos e Intervalos
Cerrados vs. SemiabiertosSaltos (Stride)Métodos de RangosRangos en SwitchResumen - Cuadrícula de calendario5Funciones de orden superior Pt. 1
MapFilterReduceEncadenar map, filter, reduceResumen - Estadísticas de palabras