Este documento explica cómo añadir un nuevo ejercicio de práctica.
La forma más sencilla de comprobar qué ejercicios de práctica aún no se han implementado es ir a la página de build del track (por ejemplo, https://exercism.org/tracks/csharp/build) y mirar la sección «Ejercicios de práctica».
Los datos de la página de build se actualizan una vez al día.
Puedes generar rápidamente la estructura de un nuevo ejercicio de práctica ejecutando el script bin/add-practice-exercise (código fuente) desde el directorio raíz del track:
bin/add-practice-exercise <exercise-slug>
De forma opcional, también puedes indicar la dificultad del ejercicio (con -d), el nombre de usuario de GitHub del autor (con -a) o ambos:
bin/add-practice-exercise -d 3 -a foobar <exercise-slug>
Si trabajas en el repositorio de un track que no tiene este fichero, no dudes en copiarlos a tu repositorio usando el enlace al código fuente de arriba.
Una vez creados los ficheros generados, tendrás que:
.meta/config.json del ejercicio:
authors
config.json del track:
practices (solo es necesario cuando el track tiene ejercicios de concepto)prerequisites (solo es necesario cuando el track tiene ejercicios de concepto)Una parte fundamental de añadir un ejercicio es añadir tests. A grandes rasgos, hay dos opciones a la hora de añadir tests a un ejercicio de práctica:
canonical-data.json del ejercicio que encontrarás en el repositorio problem-specifications.https://exercism.org/exercises/<slug> para ver qué tracks han implementado un ejercicio concreto).La segunda opción puede resultar especialmente atractiva, ya que te da resultados rápidos. Ten en cuenta, no obstante, que debes adaptar la implementación para que encaje lo mejor posible con tu track. Por ejemplo, algunos tracks no usan clases y solo trabajan con funciones. Si tu track suele trabajar con objetos, deberías adaptar la implementación a lo que mejor encaje con tu track.
Algunos tracks usan un generador de tests para generar (o regenerar) automáticamente el fichero o los ficheros de tests de un ejercicio. Consulta la documentación del track para ver si hay un generador de tests y, en tal caso, cómo usarlo.
Para asegurarte de que es posible escribir código que pase los tests, hay que añadir una implementación de ejemplo.
El código no tiene que ser idiomático; solo tiene que pasar los tests.
Puedes comprobar que la implementación de ejemplo pasa todos los tests ejecutando el script bin/verify-exercises (código fuente) desde el directorio raíz del track:
bin/verify-exercises <exercise-slug>
Usa la salida para comprobar que la implementación de ejemplo pasa todos los tests.
Si trabajas en el repositorio de un track que no tiene este fichero, no dudes en copiarlos a tu repositorio usando el enlace al código fuente de arriba.
Entre bastidores, el script bin/verify-exercises hace varias cosas:
El fichero o los ficheros de implementación stub proporcionan un punto de partida para los estudiantes.
Recomendamos que los ficheros stub contengan la cantidad mínima de código para que:
En la práctica, esto significa definir las funciones o métodos que se comprueban en la suite de tests. Cada track es libre de organizar este código como quiera, siempre que se asegure de que el código stub falla inicialmente todos los tests.
Python:
def two_fer(name):
pass
Kotlin:
fun twofer(name: String): String {
TODO("Implement the function to complete the task")
}
El último paso es ejecutar el linter para comprobar que los ficheros (de configuración) del track están bien estructurados, tanto sintáctica como semánticamente.
En primer lugar, asegúrate de tener la última versión de configlet ejecutando:
bin/fetch-configlet
A continuación, ejecuta el linter con:
bin/configlet lint
Usa la salida para comprobar que todo está en orden.
Cuando todo esté en orden, puedes enviar un Pull Request al repositorio del track.
Antes de enviarlo, lee la Guía de Pull Requests para colaboradores y la Guía de Pull Requests.
Asegúrate de que la descripción del PR incluya el ejercicio que se añade.