Karel Interactivo

Ver en PDF

Enviar solución

Puntos: 100 (parcial)
Límite de tiempo: 4.0s
Límite de memoria: 128M

Autor:
Tipo de problema
Lenguajes permitidos
ReKarel

Descripción

Karel está jugando con Warel a un juego. En él, Warel cubre los ojos de Karel y lo coloca en algún lugar del mundo.

Warel deja a Karel hacer lo que él quiera por un tiempo y luego lo lleva al inicio del mundo. Entonces Warel le quita la venda de los ojos a Karel y le pide que regrese a donde lo puso la primera vez.

¿Puedes ayudar a Karel a encontrar una estrategia para volver al lugar en donde lo puso Warel?

Problema

Escribe un programa que implemente dos funciones memoriza y regresar, que ayuden a Karel a regresar a la posición orignal en la que estaba.

Interacción

Abajo puedes ver las plantillas para Java y Pascal. En ella están las funciones pre creadas memoriza y regresar pero están vacías. Nótese que no puedes tocar nada debajo del comentario que hemos puesto.

La función memoriza se llama primero, y tienes que hacer un programa como tú quieras, dentro de los límites del mundo, para que tú, después puedas regresar a la posición original. Esta función tienes que escribirla tú.

La función veAOrigen ya está escrita, y lo único que hace es regresar a Karel a (1,1) y orientarlo al norte. Esta función no la debes de tocar.

La función regresar se llama al final, y tiene que, de alguna forma, hacer que Karel regrese a su posición inicial en el mundo. Esta función también debes escribirla tú.

Plantilla de JAVA

import rekarel.globals;
class program {

    void memoriza() {

    }

    void regresar() {

    }

//  ABAJO DE AQUI NO SE PUEDE TOCAR

    void veAOrigen() {
        while (notFacingSouth)
            turnleft();
        while(frontIsClear)
            move();
        while(notFacingWest)
            turnleft();
        while(frontIsClear)
            move();
        while(notFacingNorth)
            turnleft();
    }

    program () {
        memoriza();
        veAOrigen();        
        regresar();
        turnoff();
    }
}

Plantilla de Pascal

usa rekarel.globales;
iniciar-programa

    define-nueva-instruccion memoriza como inicio
    fin;

    define-nueva-instruccion regresar como inicio
    fin;

    { ABAJO DE AQUI NO SE PUEDE TOCAR }

    define-nueva-instruccion veAOrigen como inicio
        mientras no-orientado-al-sur hacer inicio
            gira-izquierda;
        fin;
        mientras frente-libre hacer inicio
            avanza;
        fin;
        mientras no-orientado-al-oeste hacer inicio
            gira-izquierda;
        fin;
        mientras frente-libre hacer inicio
            avanza;
        fin;
        mientras no-orientado-al-norte hacer inicio
            gira-izquierda;
        fin;
    fin;

    inicia-ejecucion
        memoriza;
        veAOrigen;  
        regresar;
        apagate;
    termina-ejecucion
finalizar-programa

Consideraciones

  • Karel empieza en algún lugar del mundo con orientación desconocida.
  • Karel inicia con infinitos zumbadores en la mochila.
  • Después de la ejecución de tu método memoriza Karel y el mundo pueden terminar como tú quieras.
  • Al iniciar la ejecución de tu método regresar Karel iniciará en (1,1) orientado al norte.
  • Si se modifica el código debajo del comentario, obtendrás 0 pts.
  • No importa la orientación final de Karel, o cuántos zumbadores terminen en el mundo
  • Sólo importan la posición final de Karel y que no hayas hecho cambios en el mundo
  • Si en cualquier momento usas la funcion turnoff / apagate obtendrás 0 pts.

Mundo de ejemplo


Comentarios


  • 0
    Evalcrz13  comentado el 2 oct. 2025, 2:08 a.m.

    hehe hago trampas con los parametros


    • 0
      kishtarn_  comentado el 11 oct. 2025, 3:31 a.m. editado

      Hola, tu ultima solucion no parece tener problemas ni realizar nada prohibido


      • 0
        Evalcrz13  comentado el 24 oct. 2025, 10:49 p.m.

        A si, perdon, yo lo habia puesto de broma ese comentario, pero el problema parecia que iba a tener una solucion mas complicada. perdon por las molestias