Prueba Evalart de programación: formato, práctica original y errores que revisar
Quick Overview
Guía para interpretar una invitación Evalart y elegir práctica de código, SQL, teoría o aptitud. Incluye ejercicios originales de caracteres únicos y estados por solicitud, soluciones verificadas y límites claros de la evidencia oficial.
Una invitación a una prueba Evalart de programación no basta para elegir qué practicar. Puede mencionar código, SQL, conocimientos de un lenguaje o razonamiento, y cada bloque exige una respuesta distinta. Antes de resolver ejercicios al azar, identifica qué debes entregar y qué instrucciones acompañan a tu evaluación.
Nuestra propuesta: convierte la invitación en un mapa de tareas y practica con contratos de entrada y salida explícitos. Aquí encontrarás dos ejercicios originales resueltos —uno de código y otro de SQL— para revisar contratos y errores; no predicen las preguntas ni el resultado de tu evaluación. Para ensayar el primero con otro enunciado, utiliza Find index of first unique character.

Qué está confirmado y qué depende de tu invitación
Información oficial del proveedor: el catálogo de programación de Evalart distingue habilidad para programar, conocimientos de programación, SQL y aptitud para programar, entre otras áreas. Describe ejercicios ejecutables y preguntas de conocimiento; no presenta una sola evaluación obligatoria para todas las vacantes. Sus afirmaciones comerciales sobre predecir el desempeño no son una garantía que adoptemos aquí.
Dos fichas públicas muestran por qué conviene leer el nombre completo. Conocimientos de SQL combina teoría y consultas prácticas; la ficha consultada indica siete preguntas y un límite de 25 minutos. Programación + SQL + IQ describe razonamiento, un algoritmo y SQL mediante pseudocódigo; indica seis preguntas y 60 minutos. Son ejemplos del catálogo consultado el 11 de octubre de 2026, no los tiempos prometidos para tu enlace.
La guía oficial de uso explica que un proceso puede combinar pruebas y que se pueden configurar atributos como idioma, tiempo y visibilidad del puntaje. Nuestra deducción: utiliza las instrucciones de tu evaluación para preparar su combinación concreta, sin trasladar la configuración de una ficha o de otra persona.
Límite de los testimonios: nuestra búsqueda no reunió dos relatos independientes de candidatos del mismo ciclo que permitieran corroborar un recorrido específico de Evalart. Por eso no atribuimos a candidatos una dificultad típica, preguntas repetidas, un corte de aprobación ni un orden de etapas. Los ejercicios siguientes son práctica propia; no son preguntas filtradas del proveedor.
Mapear la invitación antes de empezar
Anota el nombre exacto de cada bloque, el plazo para responder y las instrucciones disponibles antes del inicio. Si falta un dato decisivo, pregunta al contacto del proceso antes de entrar a una sesión cronometrada. Prepara los bloques indicados en tu invitación; el logotipo no identifica por sí solo sus tareas.
- Código: lee la firma o plantilla, resuelve el algoritmo y comprueba el resultado esperado.
- SQL: identifica tablas, granularidad, uniones, agregaciones y orden de salida.
- Teoría: explica el comportamiento del lenguaje, los tipos, los errores y las diferencias entre alternativas.
- Aptitud: sigue condiciones, reconoce patrones y traza pseudocódigo con precisión.
Esta clasificación es una herramienta editorial, no una captura de una invitación real. Puede haber combinaciones. Un buen resultado en un ejercicio de listas no demuestra que puedas resolver consultas con duplicados; memorizar definiciones de SQL tampoco demuestra que devuelvas las filas correctas.
Reglas oficiales para candidatos: las preguntas frecuentes de Evalart indican que no se permite ayuda externa o Internet salvo autorización explícita de la pregunta. También describen un editor integrado para ejecutar código en el lenguaje solicitado, variables predefinidas que conviene respetar y un cronómetro que no se pausa. Comprueba estas reglas antes de iniciar; un ensayo local con documentación no equivale a tener permiso para consultarla durante la evaluación.
En tu preparación, separa aprender de simular. Al aprender, consulta la documentación y corrige conceptos. Al simular, aplica las restricciones confirmadas y registra qué pudiste resolver sin ayuda. No uses este artículo para contestar una prueba activa cuyas reglas lo prohíban.
Ejercicio original de código: primer carácter no repetido
Contrato de nuestro ejercicio: recibe una cadena y devuelve el índice, empezando en cero, del primer carácter que aparece exactamente una vez. Devuelve -1 si no existe. Distingue mayúsculas y minúsculas, conserva los espacios y cuenta puntos de código de Python. La entrada ya es una cadena válida; no añadimos conversión de tipos ni lectura de teclado.
Para "abac", las frecuencias son a: 2, b: 1, c: 1. El resultado es 1, porque b aparece antes que c. Para "aabb", el resultado es -1. Un conjunto conserva qué caracteres existen, pero no permite distinguir uno que apareció una vez de otro que apareció dos veces.
from collections import Counter
def primer_unico(texto):
frecuencias = Counter(texto)
for indice, caracter in enumerate(texto):
if frecuencias[caracter] == 1:
return indice
return -1
La primera pasada reúne frecuencias; la segunda recorre el orden original y devuelve el primer candidato válido. La documentación oficial de Python define Counter como un contador de elementos hashables. La elección de esta estructura es nuestra solución para este contrato, no una exigencia de Evalart.
Con operaciones de diccionario de costo promedio constante, el tiempo esperado es O(n) y el espacio adicional O(u), donde u es el número de caracteres distintos. Usar texto.count(caracter) dentro de un bucle puede volver a recorrer la cadena muchas veces. Ese bucle puede volver a contar los mismos caracteres una y otra vez, aunque ocupe pocas líneas.
Antes de mirar el código, escribe la salida de estos casos:
| Entrada | Salida y razón |
|---|---|
"" | -1: no hay candidato |
"x" | 0: el único carácter es válido |
"aabbc" | 4: el candidato aparece al final |
"aA" | 0: la comparación distingue mayúsculas |
" aa" | 0: el espacio también cuenta |
El último caso obliga a decidir si puedes aplicar strip(). Aquí cambiaría la entrada y violaría el contrato. Del mismo modo, convertir todo a minúsculas alteraría "aA". Estas transformaciones solo son correctas cuando el enunciado las pide.
Los caracteres visibles también requieren cuidado. En "e\u0301e", Python recorre tres puntos de código: e, acento combinante y e. La función devuelve 1. No hemos implementado segmentación en grafemas ni normalización Unicode. Si el problema habla de caracteres percibidos por una persona, aclara esa unidad antes de reutilizar el algoritmo.
Ejercicio original de SQL: estado más reciente por solicitud
Este segundo ejercicio necesita una salida tabular, no una función de cadenas. Tenemos requests(request_id) y events(event_id, request_id, occurred_at, status). event_id es único, las columnas del evento son obligatorias y su solicitud debe existir. Las fechas del ejemplo usan el mismo formato fijo y zona temporal; así pueden ordenarse como texto en esta fixture.
Contrato: devuelve todas las solicitudes, una fila por solicitud, con el estado del evento más reciente. Ante fechas iguales, gana el event_id mayor. Una solicitud sin eventos debe aparecer como SIN_EVENTOS, con identificador de evento NULL. Ordena la salida por request_id.
Las solicitudes son A, B, C y D. Sus eventos son:
event_id request_id occurred_at status
1 A 2026-10-01T09:00:00 FAILED
2 A 2026-10-01T09:00:00 PENDING
3 B 2026-10-01T09:00:00 PENDING
4 B 2026-10-01T10:00:00 SUCCEEDED
5 D 2026-10-01T08:00:00 FAILED
La solicitud C no tiene eventos. La salida correcta es A/PENDING/2, B/SUCCEEDED/4, C/SIN_EVENTOS/NULL y D/FAILED/5. El desempate de A está definido por el ejercicio; no supone que un identificador mayor siempre sea más reciente que una fecha posterior.
WITH ordenados AS (
SELECT request_id, event_id, status,
ROW_NUMBER() OVER (
PARTITION BY request_id
ORDER BY occurred_at DESC, event_id DESC
) AS rn
FROM events
)
SELECT r.request_id,
COALESCE(o.status, 'SIN_EVENTOS') AS latest_status,
o.event_id
FROM requests AS r
LEFT JOIN ordenados AS o
ON o.request_id = r.request_id AND o.rn = 1
ORDER BY r.request_id;
La documentación de funciones de ventana de SQLite explica la numeración de filas dentro de una partición. Aquí PARTITION BY separa solicitudes; el orden descendente decide qué evento recibe rn = 1. El identificador único resuelve el empate temporal de manera determinista.
El filtro o.rn = 1 está en la condición de la unión. Según la semántica documentada de LEFT JOIN y WHERE, mover ese filtro a WHERE eliminaría la fila sin coincidencia de C. La salida exigida incluye C/SIN_EVENTOS/NULL, aunque C no tenga ninguna fila en events. COALESCE etiqueta la ausencia; con estados obligatorios, no confunde un estado nulo almacenado con una solicitud sin evento.

Errores que el ejemplo pequeño permite detectar
Agrupar y elegir columnas sin relación. MAX(occurred_at) identifica una fecha, pero no demuestra que otro campo seleccionado pertenezca a ese evento. Una unión posterior solo por la fecha puede devolver dos filas para A. Comprueba el estado y que cada solicitud aparezca exactamente una vez; dos filas para A también violan el contrato.
Filtrar estados antes de elegir el último evento. Si buscas únicamente eventos PENDING antes de clasificarlos, B puede parecer pendiente aunque después haya llegado SUCCEEDED. Primero determina el estado actual según el contrato; después aplica cualquier filtro requerido.
Ordenar solo por identificador. Nuestro caso adicional asigna un identificador grande a un evento anterior. La fecha debe decidir primero. El desempate por identificador solo actúa cuando ambas fechas coinciden.
Usar RANK() sin revisar empates. Si dos filas comparten los valores de ordenación, pueden compartir rango. Para este contrato necesitamos una fila y un orden total. Cambiar de función sin revisar ese requisito puede cambiar el número de resultados.
Confiar en la apariencia del ejemplo. En código, "abac" no comprueba el caso sin respuesta ni la posición cero. En SQL, un conjunto donde todas las solicitudes tienen eventos no comprueba el LEFT JOIN. Diseña una entrada que contradiga cada suposición importante.
Qué ejecutamos y cómo revisar tu propio ensayo
La fixture original y su resultado guardado documentan 24 escenarios locales ejecutados: 15 para la función de cadenas en CPython 3.12.14 y nueve para la consulta en SQLite 3.53.4. Incluyen vacío, repetición, mayúsculas, espacios, Unicode y candidato al final; en SQL, ausencia de solicitudes o eventos, inserción en orden inverso, empate temporal y fecha posterior con identificador menor.
Estos resultados verifican nuestros ejercicios bajo sus contratos. No miden una puntuación Evalart, no revelan casos privados ni prueban el mismo SQL en todos los motores. Tampoco son una medición de rendimiento de producción. Adapta sintaxis y límites al lenguaje o motor realmente solicitado.
Después de un ensayo, clasifica el primer error: lectura del contrato, algoritmo, implementación, límite, consulta o entrega. Escribe una corrección concreta, como «comprobar índice cero» o «mantener solicitudes sin eventos». «Necesito practicar más SQL» es demasiado amplio para elegir el siguiente ejercicio.
Antes de entregar, compara tu respuesta con el formato pedido: valor devuelto, nombre de función, columnas, tipos y orden. Retira salidas de depuración cuando no formen parte del resultado. Si encuentras una incidencia de plataforma, conserva el mensaje y consulta al contacto del proceso; cambiar una solución correcta al azar dificulta explicar lo ocurrido.
Elegir cinco prácticas según el bloque confirmado
Las siguientes preguntas PracHub proceden de otros contextos. Sirven para practicar contratos y límites; no las atribuimos a Evalart. Conserva los requisitos de cada enunciado, especialmente cuando sean más amplios que nuestros ejemplos.
| Pregunta completa | Objetivo de práctica |
|---|---|
| Find index of first unique character | Defender frecuencias, posición cero y alcance Unicode |
| Implement Adjacent-Line Uniq | Distinguir repetición consecutiva y duplicados globales |
| Compute each member’s current notification status | Reconstruir el estado actual a partir de eventos |
| Compare ROW_NUMBER, RANK, and DENSE_RANK for Top-k Results | Explicar empates y cantidad de filas devueltas |
| Write SQL using joins and window functions | Comprobar granularidad y uniones antes de agregar |
Si tu invitación confirma SQL, empieza por Compute each member’s current notification status. Si confirma código, empieza por la pregunta del primer carácter único. Elige la práctica por el trabajo que debes demostrar y registra el caso que hizo fallar tu primera respuesta.
Sources and Further Reading
- Evalart — Pruebas de programación — categorías oficiales; no implica una evaluación universal.
- Evalart — Conocimientos de SQL — ejemplo concreto del catálogo consultado el 11 de octubre de 2026.
- Evalart — Programación + SQL + IQ — otro ejemplo de combinación, sin extrapolar su duración.
- Evalart — Guía de uso — configuración de pruebas y procesos.
- Evalart — Preguntas frecuentes para candidatos — instrucciones sobre ayuda, editor y cronómetro.
- Python 3.12 — collections.Counter — contador utilizado en nuestra solución.
- SQLite — Window Functions — particiones y numeración de filas.
- SQLite — SELECT — semántica de uniones y filtrado.
Comments (0)