Desarrollador C++

Crea una aplicación que se pueda utilizar para buscar una cadena de texto en archivos.

Entrada:

La aplicación recibirá dos parámetros en la línea de comandos. El primer parámetro es una ruta a un archivo o carpeta, mientras que el segundo parámetro es la cadena que se debe buscar (longitud máxima de 128 caracteres).


Salida:

Imprime la salida en stdout en el formato:  <file>(<position>): <prefix>…<suffix>”.
<file>: Nombre del archivo que contiene la cadena.
<position>: Desplazamiento dentro del archivo donde comienza la coincidencia (base cero).
<prefix>: Contiene tres caracteres antes de la coincidencia
<suffix>: Contiene tres caracteres después de la coincidencia.

Si no hay suficientes caracteres para el prefijo o el sufijo (al inicio o final del archivo), se usan tantos como estén disponibles. En los prefijos y sufijos, las tabulaciones deben imprimirse como \t y los saltos de línea como "\n"

Se debe asumir que la ruta puede apuntar a un solo archivo de texto o a un directorio con archivos y/o más carpetas (la aplicación debe poder recorrer y procesar todos los archivos en subdirectorios de manera recursiva). La aplicación debe considerar que los archivos pueden ser muy grandes (limitaciones de memoria). No debe fallar por ninguna razón (manejo adecuado de excepciones y errores de funciones del sistema) y debe imprimir mensajes de error significativos cuando ocurra un problema (por ejemplo, si no se proporcionan suficientes argumentos o si la ruta de entrada no es válida).

Nota! La solución debe hacer uso de multihilos para procesar los datos (al menos en teoría). Sin embargo, una solución de un solo hilo podría ser más rápida en un escaneo secuencial, especialmente en discos lentos. Se debe maximizar la velocidad y comparar los resultados con una solución de un solo hilo.
 

¿Qué evaluaremos?

La forma en que construyas tu solución queda a tu criterio. Es mejor tomarse el tiempo necesario y entregar una solución excelente en lugar de apresurarse y entregar una solución mediocre. Utilizaremos tu solución para estimar tu nivel de experiencia en desarrollo de software. Una solución bien hecha garantizará una entrevista, un nivel de puesto más alto y una oferta salarial más atractiva. Tu solución será discutida en detalle durante la entrevista.

Tu código fuente debe demostrar:

  • estilo de programación,
  • uso de principios de programación orientada a objetos,
  • mejores prácticas en C++,
  • uso sistemático de convenciones de nombres,
  • uso adecuado de comentarios en los lugares correctos,
  • buena estructura de código,
  • manejo de errores y excepciones,
  • evitación de construcciones peligrosas o propensas a errores,
  • comprensión del funcionamiento interno de C++ y sus funciones estándar (evitar desperdicio de memoria o copias innecesarias de cadenas o memoria).

Se debe evitar cualquier fuga de memoria (por ejemplo, debido a excepciones no manejadas). Preferimos ver el uso de la biblioteca estándar de C++14, pero también se acepta el uso de Boost.

Una cita que lo explica bien:
"Siempre programa como si la persona que terminará manteniendo tu código fuera un psicópata violento que sabe dónde vives." :-)

Envía tu solución a: challenge@joineset.com


Al participar en este desafío, aceptas los Términos y Condiciones de ESET y reconoces su Política de Privacidad