Editor de Preguntas
El Editor de Preguntas se abre en una ventana emergente al añadir o editar una pregunta. Al crear nuevas preguntas principales, primero deberás seleccionar el tipo de pregunta y, en el caso de preguntas de programación, el lenguaje de codificación. Las preguntas que no son de programación pasarán directamente a la etapa final, donde ingresarás el texto de la pregunta y configurarás las opciones de respuesta según sea necesario. El texto de la pregunta admite imágenes, bloques de código y otras funciones de formato comunes.

⚠️ Guardar cambios
Los cambios realizados en el Editor de Preguntas no se guardan hasta que hagas clic en Guardar. Si cierras la ventana o haces clic en Cancelar, se descartarán todos los cambios.
Seleccionar Tipo de Pregunta
La primera página del editor requiere que selecciones un tipo de pregunta de entre las siguientes opciones:
Múltiples opciones: Permite una o varias respuestas correctas de una lista de opciones posibles. Se puede utilizar para preguntas de opción única o múltiple, así como preguntas de Verdadero o Falso. Para opción única, puedes seleccionar una o más respuestas correctas, y para preguntas de opción múltiple, puedes especificar cuántas respuestas se requieren. Las opciones pueden mostrarse en orden aleatorio o en el orden definido.
Múltiples imágenes: Similar a Múltiples opciones, pero en lugar de texto, las opciones son imágenes.
Texto corto: Acepta un número o texto corto que requiere coincidencia exacta. Por defecto, las respuestas distinguen entre mayúsculas y minúsculas, aunque puedes desactivar esta opción. Admite una o varias respuestas correctas.
Programación: Presenta un desafío de codificación que requiere que el candidato resuelva un problema mediante una función que recibe parámetros y devuelve una respuesta. Debes seleccionar uno de los 12 lenguajes de programación compatibles. Las respuestas se validan mediante casos de prueba definidos durante la configuración.
SQL: Desafío de codificación en SQLite que requiere escribir una consulta. Admite consultas SELECT, INSERT, UPDATE y DELETE. Las respuestas se validan a través de casos de prueba y una consulta de verificación.
Texto largo: Pregunta de respuesta abierta que debe ser calificada manualmente después de que el candidato responde. Estas preguntas no se califican automáticamente; sin embargo, Zamdit permite el uso de revisores internos o externos antes de asignar una nota final.

Seleccionar Lenguaje de Programación
Para preguntas de codificación, deberás seleccionar uno de los 12 lenguajes compatibles. Los casos de prueba del sistema admiten varios lenguajes para mayor flexibilidad, pero las preguntas personalizadas no permiten aún esta función.

Configuración y Respuestas
Múltiples opciones
Este tipo de pregunta requiere que el candidato seleccione una o varias respuestas de una lista disponible. Puedes definir cualquier número de opciones, aunque se recomienda entre 3 y 6, con al menos 2 opciones obligatorias. Usa el panel Añadir opción para añadir una nueva, el icono de puntos para reordenar arrastrando y soltando, y el icono de Eliminar para borrar una opción. Para editar, haz clic en el texto.
Marca las opciones que se considerarán correctas al calificar. Debe haber al menos una opción correcta, aunque la cantidad depende de la configuración adicional. Las opciones disponibles son:
- Duración esperada para responder: Define el tiempo estimado que tomará responder la pregunta. Esto permite comparar la duración total de la prueba con el límite de tiempo y alertar si hay una diferencia considerable.
- Puntuación: Si está activada la opción Las preguntas pueden tener diferentes puntuaciones, puedes asignar un valor entre 1 y 10 según la complejidad y el peso de la pregunta.
- Respuesta múltiple: Define si la pregunta es de opción única o múltiple, mostrando botones de opción o casillas de verificación respectivamente.
- Más de una respuesta correcta: Para preguntas de opción única, marca esta opción si hay más de una respuesta correcta. En estos casos, aunque hayas seleccionado más de una respuesta correcta, el candidato sólo debe seleccionar una correcta para que su respuesta sea válida.
- Número de respuestas requeridas: Para opción múltiple, puedes especificar cuántas opciones correctas debe elegir el candidato para que la respuesta sea considerada correcta. Si el candidato selecciona alguna opción incorrecta, la respuesta será marcada como incorrecta, sin importar las otras opciones seleccionadas.
- Orden aleatorio: Marca esta opción si deseas que las opciones se muestren en orden aleatorio.

Imágenes Múltiples
Similar a Múltiples opciones, pero las opciones son imágenes. Los candidatos pueden ampliarlas si el tamaño mostrado es menor a la resolución real.

Texto Corto
Las preguntas de texto corto permiten respuestas precisas y fáciles de evaluar, ideales para evaluar conocimientos específicos o hechos concretos. Son útiles para fechas, nombres o definiciones, ya que minimizan la ambigüedad y reducen la subjetividad en la calificación. También facilitan la experiencia del candidato al centrarse en lo esencial.
Se requiere al menos una respuesta correcta, aunque pueden añadirse varias. Si la respuesta del candidato coincide con cualquiera de las correctas, se considera válida. Por defecto, la comparación distingue entre mayúsculas y minúsculas, pero se puede desactivar.
Configuraciones comunes: Duración esperada y Puntuación.

Codificación
Estas preguntas permiten evaluar directamente las habilidades de codificación, la capacidad de resolución de problemas y la eficiencia en la escritura de código de un candidato, aspectos esenciales para roles técnicos. Estas preguntas permiten a los equipos de selección evaluar no solo si un candidato puede escribir código correcto y eficiente, sino también cómo aborda los desafíos y aplica la lógica en condiciones de prueba. Este enfoque práctico simula escenarios reales de trabajo, ofreciendo una imagen más precisa de la competencia técnica y la preparación del candidato que las preguntas teóricas por sí solas.
Asegúrate de que el problema de programación defina claramente el objetivo, explicando en términos precisos lo que el candidato debe hacer. Esta claridad ayuda a que los candidatos comprendan la tarea rápida y correctamente. Un enunciado bien definido permite a los candidatos concentrarse en resolver el problema de manera eficiente en lugar de tratar de descifrar qué se espera. Este enfoque no solo garantiza una evaluación más justa, sino que también refleja escenarios del mundo real donde los requisitos claros son esenciales para el éxito de los proyectos. Además, es importante proporcionar algunos ejemplos de entrada y salida que cumplan con los requisitos, incluyendo todos los detalles relevantes. Opcionalmente, puedes añadir pistas o consideraciones adicionales.
En Zamdit, las preguntas de programación requieren que los candidatos resuelvan un problema mediante una función que recibe parámetros y devuelve una respuesta. Las respuestas se verifican automáticamente usando casos de prueba definidos durante la configuración de la pregunta.
La configuración de la pregunta requiere definir cuatro secciones. Usemos el siguiente problema de programación para entender mejor el proceso. El lenguaje seleccionado es TypeScript.
Problema de programación
Dado un arreglo de enteros, numbers, en el rango [-1000, 1000], determina si existe un par de números opuestos distintos de cero dentro el arreglo (es decir, un número x y su opuesto -x, donde x ≠ 0).
Ejemplo 1:
Entrada: [1, 2, 3, 4, 5]
Salida: false (no hay números opuestos)Ejemplo 2:
Entrada: [2, -3, -4, 3, 6, 1]
Salida: true (ya que 3 y -3 son opuestos)Ejemplo 3:
Entrada: [4, -1, 3, 8, -2, -7]
Salida: false (no hay números opuestos)Restricciones:
-1000 <= numbers[i] <= 1000- El arreglo contiene al menos un elemento.
Notas:
Excluye el 0 al buscar pares opuestos; pares como [0, 0] no se consideran números opuestos válidos.
Firma de la función
Aquí defines los detalles básicos de la función que debe implementar el candidato.
Nombre: El nombre de la función, que debe ser un identificador válido. Puedes escribirlo con cualquier estilo de mayúsculas y minúsculas, y el sistema lo ajustará al formato correcto según el lenguaje de programación seleccionado.
Tipo primitivo de salida: Uno de los siguientes tipos:
- Integer (Entero)
- String (Cadena)
- Float (Número de punto flotante)
- Boolean (Booleano)
- Double (Número de punto flotante de doble precisión)
Tipo de variable de salida: La dimensión de los parámetros de salida del tipo primitivo. Puede ser uno de los siguientes:
- Valor único
- Matriz unidimensional
- Matriz bidimensional
El orden es relevante: Si el tipo de variable es un Matriz unidimensional, marca esta casilla para especificar que el orden de los elementos debe coincidir con el orden esperado. De lo contrario, el sistema solo comprobará que el arreglo de respuesta contenga los mismos valores que el esperado.
Parámetros de entrada: Especifica cada parámetro de entrada por nombre, tipo primitivo y tipo de variable. El nombre debe ser un identificador válido en el lenguaje de programación. Los tipos primitivos y de variable admiten los mismos valores que la salida.

⚠️ Nota
Los objetos no son compatibles como parámetros de entrada ni como salidas de función.
Código inicial
El código inicial proporciona el punto de partida para el candidato. Muestra la firma de la función, que se genera automáticamente a partir de las especificaciones anteriores. Puedes agregar código adicional como base si lo requiere la tarea. Asegúrate de no eliminar las secciones donde se espera que el candidato escriba su solución.

Casos de prueba
Los casos de prueba consisten en combinaciones de entradas y salidas que cumplen con los requisitos especificados en la pregunta. Para cada caso, debes indicar si estará disponible para los candidatos. Si la casilla está marcada, el caso de prueba se mostrará durante la evaluación para que el candidato pueda probar su código. Una vez que se envía la respuesta, todos los casos, incluidos los disponibles para los candidatos, se usarán para la validación. Los casos utilizados solo para validación deben cubrir todos los requisitos, incluyendo excepciones y casos límite.
Según la complejidad de la pregunta, se recomienda crear entre 8 y 15 casos de prueba, y seleccionar entre 2 y 5 para que estén disponibles durante la evaluación.
Los casos se ejecutan uno a uno, usando los parámetros de entrada definidos. Si el código del candidato devuelve el resultado esperado, se considera aprobado (ejecutado con éxito). Al ejecutar los casos, el candidato recibirá retroalimentación para cada uno. Información adicional, como errores de compilación, se mostrará de acuerdo con la configuración de la evaluación.
La puntuación final se calcula como el porcentaje de casos aprobados. Un informe detallado estará disponible para el equipo de selección y cualquier revisor externo invitado a evaluar la solución del candidato.
Introduce todos los casos de prueba haciendo clic en el panel Añadir caso de prueba. El sistema asignará un nombre automáticamente, pero puedes cambiarlo haciendo clic sobre él. Puedes eliminar un caso haciendo clic en el icono de Eliminar o reordenarlos usando el icono de Puntos para arrastrar y soltar.
Cada entrada incluirá una casilla para cada parámetro de entrada, una para el resultado esperado y otra para el límite de tiempo. Esta última es opcional y no se usa para calcular la puntuación final, pero sirve como referencia para que los revisores comparen el tiempo esperado con el tiempo real, especialmente en pruebas donde la escalabilidad es importante. El sistema mostrará un tiempo estimado al ejecutar el código de verificación.

Los valores matriciales (unidimensionales y bidimensionales) se ingresan mediante un editor especial con dos modos: Editor de arreglos o matrices y Editor de texto. El primero es útil para matrices pequeñas; el segundo permite usar notación JSON y pegar directamente desde el portapapeles.

Código de verificación
El código de verificación es esencialmente la solución modelo. Debes escribirlo y ejecutarlo para asegurarte de que todos los casos de prueba definidos son aceptados. Puedes guardar la pregunta sin ejecutarlos, pero no podrás publicar el test hasta que todas las preguntas de programación hayan pasado todos los casos de prueba.

SQL
Las preguntas de SQL son un tipo específico de pregunta de programación orientadas a SQLite, en las que se requiere que los candidatos escriban una consulta. Estas preguntas admiten consultas SELECT, INSERT, UPDATE y DELETE. La configuración de las preguntas SQL es ligeramente diferente debido al componente adicional de base de datos que implica.
La configuración de la pregunta consta de cuatro secciones. Usemos el siguiente problema de SQL para ilustrar el proceso. El problema requiere escribir una consulta UPDATE, y su configuración es un poco más compleja que la de las consultas SELECT. Esto se debe a que los casos de prueba no solo requieren el script para insertar datos, sino también una consulta SELECT para comparar los resultados de la consulta del candidato con los resultados producidos por la consulta de verificación. Luego de explicar las secciones, repasaremos el flujo que utiliza Zamdit para verificar el código del candidato en cada caso de prueba.
Problema de programación
Trabajas como desarrollador backend para una aplicación que gestiona ventas. La base de datos contiene tres tablas: products, sales y sale_items.
Su estructura y datos de ejemplo se muestran a continuación:

Datos de ejemplo para la tabla products:
| id | name | unit_price |
|---|---|---|
| 1 | Papel A4 x 500 | 5.60 |
| 2 | Bolígrafos x 10 | 2.50 |
| 3 | Grapadora | 2.30 |
Datos de ejemplo para la tabla sales:
| id | sale_date | client_name |
|---|---|---|
| 1 | 2022-01-06 | Flexible Solutions |
| 2 | 2022-01-07 | Coastal Investors |
| 3 | 2022-01-07 | Zany Solutions |
Datos de ejemplo para la tabla sale_items:
| id | product_id | sale_id | quantity | unit_price |
|---|---|---|---|---|
| 1 | 1 | 1 | 4 | 5.70 |
| 2 | 6 | 1 | 2 | 3.65 |
| 3 | 12 | 2 | 3 | 2.25 |
Tarea:
Escribe una consulta SQL que actualice los precios de los 10 productos que históricamente han generado mayores ingresos, incrementando sus precios en un 10%.
Notas:
- Los datos proporcionados son solo de ejemplo; la base de datos real contiene muchas más filas, y tu consulta debe tener esto en cuenta.
- Los ingresos se calculan como la suma de
quantity * unit_pricepara cada producto ensale_items. - Solo deben considerarse productos que tengan ventas registradas.
- Los nombres de los productos son únicos.
- Los precios de los productos pueden variar con el tiempo, por lo que el
unit_priceensale_itemsrepresenta el precio en el momento de cada venta. - Si dos o más productos tienen los mismos ingresos, ordénalos alfabéticamente por nombre del producto (de la A a la Z).
- La consulta debe aplicar la actualización en la tabla
products, que almacena elunit_priceactual.
Configuración inicial
El primer paso es seleccionar el tipo de consulta entre las cuatro opciones admitidas: SELECT, INSERT, UPDATE y DELETE. Si el tipo de consulta es SELECT, marca la casilla "El orden es relevante" para especificar que el orden de los registros resultantes al ejecutar la consulta del candidato debe coincidir con el orden de los registros esperados según la consulta de verificación. De lo contrario, el sistema solo verificará que ambos conjuntos de datos contengan los mismos registros, sin importar el orden. Esta opción es importante cuando se espera que los resultados estén en un orden específico.
A continuación, proporciona el script inicial de la base de datos, que creará la estructura y agregará registros comunes para todos los casos de prueba. Incluir la estructura de la base de datos en la descripción de la pregunta es esencial, ya que los candidatos necesitarán comprender cómo está organizada y qué tipo de información almacena. También puede ser útil proporcionar el Diagrama de Entidad-Relación de la base de datos.

Código inicial
El código inicial es el punto de partida para los candidatos. En problemas de SQL, normalmente se deja vacío. Sin embargo, según la complejidad del problema, puedes incluir algunas líneas de código, como la estructura básica de la consulta o comentarios que orienten al candidato hacia la solución.
Casos de prueba
Los casos de prueba funcionan de manera similar a los de las preguntas de codificación, pero su estructura es distinta. Al escribir un caso de prueba, debes insertar valores adicionales en la base de datos dentro del bloque Test case setup. Este script se ejecuta inmediatamente después de crear la estructura de la base, pero antes de ejecutar el código del candidato.
Para consultas de manipulación de datos, también se requiere una Consulta de comprobación. Esta es una consulta SELECT que se ejecuta tras el código del candidato para recuperar el conjunto de datos que se comparará con el resultado obtenido luego de ejecutar la configuración del caso de prueba y el código de verificación. Si ambos resultados coinciden, el caso de prueba se considera aprobado (ejecutado con éxito).

Ten en cuenta que cada caso de prueba recrea la base de datos, por lo que son completamente independientes entre sí.
Código de verificación
El código de verificación funciona de la misma manera que en otras preguntas de programación: representa la solución modelo y debe ser claro y eficiente. Una vez completada la configuración de la pregunta, debes ejecutar las pruebas usando este código para asegurarte de que todos los casos de prueba pasen correctamente. La pregunta no se podrá publicar hasta que todos los casos de prueba hayan sido aprobados.

Para comprender mejor cómo configurar preguntas SQL, veamos cómo Zamdit utiliza todas las configuraciones y en qué orden. Como los casos de prueba son independientes entre sí, nos enfocaremos en un solo caso.
Para consultas SELECT, el Código SQL de verificación se utiliza para obtener los resultados esperados (A). Estos resultados se almacenan cuando ejecutas los casos de prueba al final del proceso de configuración. Cuando los candidatos toman la prueba, su código (B) se utiliza para generar el conjunto de resultados.

Para consultas de manipulación de datos, el proceso es similar, pero se utiliza una Consulta de comprobación para obtener el conjunto de datos final.

En ambos casos, se comparan los resultados A y B. Si coinciden, el test pasa; de lo contrario, falla.
Texto Largo
Las preguntas de texto largo o abiertas permiten que los candidatos demuestren comprensión, pensamiento crítico y capacidad para expresar ideas. Son útiles para evaluar habilidades complejas como resolución de problemas, comunicación y análisis. Este formato revela cómo los candidatos enfrentan desafíos y argumentan sus respuestas, siendo ideal para roles que requieren creatividad o criterio.
Sin embargo, presentan desafíos: tardan más en responder y evaluar, requieren revisión manual y pueden generar respuestas muy variadas, afectando la consistencia de la calificación.
En estas preguntas, la puntuación final del test no se calcula hasta que se haya calificado manualmente. Zamdit permite que revisores internos o externos las evalúen antes de asignar una nota. Puedes asignar una puntuación de 0 hasta el valor máximo definido para la pregunta.
Además de los ajustes comunes como Duración esperada para responder y Puntuación, puedes limitar el número máximo de caracteres en las respuestas.
