IIC2233 / Syllabus

146 stars 13 forks source link

Penalización for y while #514

Open martinpint opened 2 weeks ago

martinpint commented 2 weeks ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Hola buenas, vi en otra issue que el uso de for y while no está prohibido, pero quería preguntar si habrá penalización por utilizar alguno de estos ciclos.

kbetelgeuse commented 2 weeks ago

Buenas @martinpint . El uso de for y while no será penalizado. Sin embargo, se recomienda no utilizar estas sentencias para el desarrollo de la tarea dado que es altamente probable que no se puedan pasar los tests de carga debido al tiempo de ejecución. Por lo general las sentencias anteriores mencionadas pueden involucrar un programa no tan eficiente o rápido como podría serlo uno hecho con programación funcional.

martinpint commented 2 weeks ago

Hola, cómo puedo saber si mi código se demora los suficiente para pasar los test al momento de que me lo revisen??

kbetelgeuse commented 2 weeks ago

Actualmente ya podrías saber si es que tu código es lo suficientemente rápido para pasar los tests: los tests de "carga de datos" ya poseen un temporizador. En estos tests se revisaría principalmente la eficiencia del código a nivel de ejecución. En caso de que el código no sea lo suficientemente rápido como para pasar los tests el output en la terminal debiera verse actualmente como lo siguiente:

código para exceso de tiempo de carga en los tests progra avanzada issues exceso de tiempo de carga en los tests progra avanzada issues

El output anterior en el terminal se generó con el código de la primera imagen. El código se creó a propósito para generar una ejecución sin término que permita visualizar cómo debiera verse el output de los tests en caso de que se supere el máximo de tiempo. Para la revisión de la tarea no debería ser muy distinto a lo mostrado en las imágenes.

vvialbarros commented 2 weeks ago

Si el test case_00_cargar_datos_py me tira todo ok con un tiempo de ejecucion de 3.7 segundos esta bien aunque haya usado "for" para cambiar de linea en el archivo? En el caso de que el tiempo de ejecucion del codigo dependa del computador donde se ejecuta el codigo, 3.7 segundos está lo suficientemente cerca del límite de tiempo como para que tenga preocuparme?

kbetelgeuse commented 2 weeks ago

Hola @vvialbarros !

En relación con lo primero que preguntas: está bien. Si es que se pasan los tests ya que se logra ejecutar todo dentro del tiempo establecido, está bien, no hay problemas. A lo que me refería con evitar el uso de for y while es que estas sentencias por lo general hacen que el tiempo de ejecución sea más lento en comparación con códigos basados en programación funcional, y que podría darse el caso en el que no se puedan pasar los tests si es que se llegan a utilizar esas sentencias. En resumen, las ideas asociadas con el uso de for y while serían las siguientes: 1) No está prohibido utilizar for y while en el desarrollo de esta tarea. 2) No está penalizado utilizar for y while en el desarrollo de esta tarea. 3) Los tests de carga de datos se enfocan en el tiempo de ejecución de las consultas que evalúan: para pasar estos tests se debe tener un tiempo de ejecución menor al tiempo límite establecido. 4) Se recomienda encarecidamente utilizar programación funcional y no depender siempre de las sentencias for y while (porque si se podría utilizar en contadas o pocas ocasiones) dado que estas por lo general hacen más lento el programa si se compara con código hecho usando programación funcional. 5) Si se pasan los tests utilizando for y/o while no hay problemas ya que no están prohibidos y no conllevan a ninguna penalización.

Por otra parte, en relación con lo segundo que comentas: en efecto, el tiempo de ejecución de los programas va a depender del computador que se utilice para revisar. A priori, no se puede adivinar si es que el programa correrá más rápido en el computador tuyo, o en el mío, el de otro ayudante, o en el que se utilizará para revisar. Entonces, si es que tu tiempo de ejecución está demasiado cerca del límite de tiempo establecido, si es que se utilizara un computador levemente más lento podría ocurrir que el tiempo de ejecución exceda el límite. Ahora, el tiempo de ejecución que mencionaste que posees está bastante lejos del tiempo máximo que se está utilizando en los tests, y sería bastante poco probable y muy extraño que se llegase a utilizar un computador que haga que aumente los tiempos de tal manera que ya no pases ese test que comentas. A su vez, como equipo docente nosotros no queremos ver perjudicados a los estudiantes (nunca lo quisimos y no lo vamos a querer ver 😉), por lo que, valga la redundancia, se tratará de que no se vean perjudicados en el momento de revisar sus tareas.

vvialbarros commented 2 weeks ago

Muchas gracias por la respuesta, pero me queda una ultima duda respecto a este tema, me parece que el limite de tiempo son 20 segundos, pero son 20 segundos para correr todos los testcases de todas las funciones juntos o son 20 segundos por testcase? Porque en mi caso son 3.7 segundos solo para cargar los archivos, luego mas todas las funciones muy probablemente se demore mas de 20 segundos en ejecutar todos los testcases de una sola vez

kbetelgeuse commented 1 week ago

Los 20 segundos asignados como límite de tiempo son por testcase, no en total: el tiempo de ejecución para cada testcase que se ejecute debe estar dentro de ese límite, no para el total de los testcases. Saludos, y espero haber podido resolver la duda :)