KarelBug Interactivo
Ver en PDFDescripció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
Plantilla Blocky
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="karel_define3" x="70" y="-30"><field name="name">memoriza</field><field name="returns">void</field><field name="cant_params">0</field></block><block type="karel_define3" x="70" y="110"><field name="name">regresar</field><field name="returns">void</field><field name="cant_params">0</field></block><block type="karel_comment_floating" x="70" y="290"><field name="value">ABAJO DE AQUI NO SE PUEDE TOCAR</field></block><block type="karel_define3" x="70" y="350"><field name="name">veAOrigen</field><field name="returns">void</field><field name="cant_params">0</field><statement name="content"><block type="karel_while"><value name="value"><block type="karel_notfacingsouth"></block></value><statement name="content"><block type="karel_turnleft"></block></statement><next><block type="karel_while"><value name="value"><block type="karel_frontisclear"></block></value><statement name="content"><block type="karel_move"></block></statement><next><block type="karel_while"><value name="value"><block type="karel_notfacingwest"></block></value><statement name="content"><block type="karel_turnleft"></block></statement><next><block type="karel_while"><value name="value"><block type="karel_frontisclear"></block></value><statement name="content"><block type="karel_move"></block></statement><next><block type="karel_while"><value name="value"><block type="karel_notfacingnorth"></block></value><statement name="content"><block type="karel_turnleft"></block></statement></block></next></block></next></block></next></block></next></block></statement></block><block type="karel_program" deletable="false" x="70" y="850"><statement name="content"><block type="karel_callsub_void_active"><mutation cantidad_args="0"></mutation><field name="function">memoriza</field><next><block type="karel_callsub_void_active"><mutation cantidad_args="0"></mutation><field name="function">veAOrigen</field><next><block type="karel_callsub_void_active"><mutation cantidad_args="0"></mutation><field name="function">regresar</field><next><block type="karel_turnoff"></block></next></block></next></block></next></block></statement></block></xml>
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 debajo de la línea de no modificar en la plantilla
- Si en cualquier momento usas la funcion turnoff / apagate obtendrás 0 pts.
Mundo de ejemplo

Comentarios
Lo mismo que karel interactivo, pero el codigo de origen tiene 2 espacios extra 😀😀😀😀🔫🔫💣💣💣💣💣💥💥💥