Ejercicios inventados

De acuerdo a la carta al estudiante:

Los estudiantes también pueden aportar ejercicios de programación y recibirán crédito por ello. Un ejercicio inventado se debe ubicar en una de las secciones temáticas. Cada sección tiene su propio peso en la nota. Un ejercicio inventado tendrá crédito por el peso de la sección donde se ubique. Los estudiantes crearán ejercicios por al menos un 2% de la nota. Más de este porcentaje, serán puntos extra que el estudiante podrá acumular en la nota del curso. Cada ejercicio inventado debe tener el mismo formato usado en los ejercicios resueltos. El profesor proveerá recursos para facilitar la elaboración de los mismos.

La creación de ejercicios correlaciona con una mayor comprensión de los conceptos de programación, de acuerdo a la literatura científica. Para crearlos, el estudiante debe prestar atención a los conceptos de programación involucrados en el tema, y puede tomar como ejemplo los ejercicios propuestos por el profesor y asistentes en la plataforma HackerRank. Los ejercicios inventados deben ser únicos entre estudiantes. Es decir, si dos o más estudiantes proponen el mismo ejercicio, se dará crédito sólo al primero en someterlo. El profesor servirá como el ente centralizador de los ejercicios inventados por estudiantes, y podrá ayudarles en el proceso de creación de los mismos durante las horas de consulta.

Plantilla para crear un ejercicio inventado en C
java_invented_exercise.zip

Para presentar los ejercicios inventados, descargue el archivo comprimido anterior. Luego siga estas instrucciones:

  1. Descomprima el archivo que descargó en una carpeta para su ejercicio propuesto.
  2. Edite el archivo problem.es.md para escribir el enunciado de su ejercicio en notación Markdown. Ubique el problema en un contexto: una situación hipotética pero realista que haga al ejercicio aplicado y más interesante. El enunciado del problema debe incluir un ejemplo de entrada que recibirán los programas que intenten resolverlo, y su correspondiente salida esperada.
  3. Escriba el caso de prueba de ejemplo. Copie el caso de prueba que incluyó en el enunciado del problema (en problem.es.md) en dos archivos: input000.txt para la entrada y ouput000.txt para la salida correspondiente.
  4. Escriba al menos cinco casos de prueba incluyendo el caso de ejemplo anterior. Piense en valores interesantes, extremos o inválidos a probar. Por ejemplo, un programa para encontrar números primos puede probarse con números negativos, cero, uno (que no es primo), y valores muy grandes que pueden hacer fallar por exceso de tiempo para una solución fuerza bruta.
  5. Solucione el problema. Diseñe una solución y escriba un algoritmo como comentarios en el archivo Solution.java. Finalmente codifique su algoritmo al lenguaje de programación.
  6. Compile su solución. Puede utilizar el script px (acrónimo de Programming eXercise) provisto. Use una terminal o línea de comandos, vaya a la carpeta donde se encuentra el ejercicio y escriba (./px). Haga correcciones hasta obtener cero errores y advertencias (warnings).
  7. Pruebe sus casos de prueba. Invoque su ejecutable con cada pareja de archivos de entrada y salida y verifique que coinciden. Por ejemplo, puede invocar java Solution < input000.txt | diff output000.txt - para comprar la salida esperada contra la salida de su programa. Si el comando anterior no genera salida, su solución pasó el caso de prueba. Para probar todos los casos de prueba puede emitir el comando ./px test.
  8. Solicite acceso al profesor al repositorio de ejercicios. Clone el repositorio en su máquina. En la carpeta tests/ del repositorio, ubique la sección a la que pertenece el ejercicio. Mueva o copie los archivos del ejercicio a una carpeta dentro de la sección a la que pertenece. Por ejemplo, si el problema a resolver es un validador de jugadas de ajedrez en el tema de matrices (1.5), podría crear su ejercicio en una carpeta cuyo nombre podría ser "tests/1.5_pointer_arrays/validador_ajedrez-NombreApellido/, donde NombreApellido corresponde a su nombre y primer apellido.
  9. Finalmente agregue el ejercicio a control de versiones (git commit). Luego envíe los cambios al repositorio remoto (git push). Debe asegurarse de actualizar su respositorio local antes de enviar cambios (git pull). Esté pendiente de observaciones que el profesor realice en el repositorio de control de versiones. Una vez que las haya incorporado en sus ejercicios, puede incluir el número de issue en el mensaje del commit correspondiente para cerrarlos.

Temas de los ejercicios

Los ejercicios del curso están agrupados en secciones temáticas, y se listan a continuación.

ParadigmaNumTemaPuntaje
Programación imperativa1.1Entrada y salida0.1
1.2Expresiones y condicionales0.2
1.3Ciclos0.3
1.4Subrutinas0.4
1.5Indirección, arreglos y matrices0.5
1.6Cadenas de caracteres0.5
1.7Registros (estructuras)0.8
1.8Recursión1.0
Programación orientada a objetos2.1Clases, objetos, atributos, métodos1.0
2.2.Sobrecarga de operadores1.0
Programación genérica3.1Arreglo dinámico1.0
3.2Lista enlazada1.0
3.3Árbol binario1.0
Programación orientada a objetos4.1Herencia y polimorfismo2.0