IIC2233 / Syllabus

146 stars 13 forks source link

Buscar y plantar #48

Open fgallard opened 2 months ago

fgallard commented 2 months ago

Prerrequisitos

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

Duda

Cuando habla de que los predios se recorren en orden, se refiere al orden predeterminado que entrega el crear_predios, o debemos ordenarlos por código de menor a mayor y después realizar el buscar y plantar?

individuocomunycorriente commented 2 months ago

Hola!! Te comento que los predios se recorren en el orden predeterminado que entrega crear_predios, por ende, no se debe ordenar por codigo de menor a mayor o viceversa. Saludos :)

Edit: Se me olvidó comentar que lo anterior lo puedes comprobar en el apartado "2.1 Plantado de cultivos" del enunciado, se menciona que "Al buscar dónde plantar los cultivos, se debe respetar el orden de prioridad de los predios disponibles, desde el primero hasta el último generado según el archivo."

Agusrush21 commented 2 months ago

Pero si fuese así los testscase relacionados a la funcion _"buscar_yplantar" no tendrían mucho sentido. Doy como ejemplo el test_06_buscar_y_plantar_dificil con el test_4. se nos dan los siguientes predios con sus correspondientes planos:

  plano_1 = [
              [1],
              [1],
          ]
          predio_1 = Predio(codigo_predio="1", alto=2, ancho=1)
          predio_1.plano = plano_1

   plano_7 = [
        [6, "X"],
    ]
    predio_7 = Predio(codigo_predio="7", alto=1, ancho=2)
    predio_7.plano = plano_7

    plano_4 = [
        [8],
    ]
    predio_4 = Predio(codigo_predio="4", alto=1, ancho=1)
    predio_4.plano = plano_4

    plano_8 = [
        [4, 3],
        [9, "X"],
    ]
    predio_8 = Predio(codigo_predio="8", alto=2, ancho=2)
    predio_8.plano = plano_8

Luego se da el siguiente orden y bloque a plantar:

   dccultivo = DCCultivo()
   dccultivo.predios = [predio_1, predio_7, predio_4, predio_8]
   resultado_estudiante = dccultivo.buscar_y_plantar(
        codigo_cultivo=6, alto=1, ancho=1)

Si fueramos recorriendo en el orden dicho claramente el bloque puede ingresar en el predio_7 antes que cualquier otro pero el testcase toma correcto el bloque ingresado en el predio_8, estando después del orden enlistado

   plano_1_esperado = [
        [1],
        [1],
    ]
    predio_1_esperado = Predio(codigo_predio="1", alto=2, ancho=1)
    predio_1_esperado.plano = plano_1_esperado

    plano_7_esperado = [
        [6, "X"],
    ]
    predio_7_esperado = Predio(codigo_predio="7", alto=1, ancho=2)
    predio_7_esperado.plano = plano_7_esperado

    plano_4_esperado = [
        [8],
    ]
    predio_4_esperado = Predio(codigo_predio="4", alto=1, ancho=1)
    predio_4_esperado.plano = plano_4_esperado

    plano_8_esperado = [
        [4, 3],
        [9, 6],
    ]`

Entonces, ¿esto seria una falla del testcase? o ¿hay algo entorno al orden que no estoy entendiendo? PD: Estoy citando directamente el código proveniente del archivo test_06_buscar_y_plantar_dificil.py

individuocomunycorriente commented 2 months ago

El test_case está correcto, debido a que en la sección 2.1 Plantado de cultivos se menciona "Una restricción importante es que no se permite la repetición del código de cultivo en el mismo predio.". Aterrizando lo anterior al test_4, el programa recorre la lista de predios [predio_1, predio_7, predio_4, predio_8] en el orden de la lista, sin embargo, no se puede plantar un cultivo con código 6 en el predio 7 debido a que ya hay un cultivo con código 6, en consecuencia busca espacio en los siguientes predios, quedando como opción final el predio 8, el cual tiene espacio y no tiene ningún cultivo con código 6. Espero haber solucionado tu duda, saludos.

Agusrush21 commented 2 months ago

A vale, no me estaba quedando claro, muchas gracias @individuocomunycorriente ahora podre corregir mejor mi código.

individuocomunycorriente commented 2 months ago

denada :)