Menu
Coddy logo textTech

Agregador de logs

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 55 de 56.

challenge icon

Desafío

Intermedio

Está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:

  1. 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>) donde count es el número de entradas válidas en ese nivel y bytes es la suma de sus bytes.
  2. 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.
  3. 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: 2

Prué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