iniciar-programa
define-nueva-instruccion norte como inicio
    mientras no-orientado-al-norte hacer inicio
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion oeste como inicio
    mientras no-orientado-al-oeste hacer inicio
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion este como inicio
    mientras no-orientado-al-este hacer inicio
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion sur como inicio
    mientras no-orientado-al-sur hacer inicio
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion deja(j) como inicio
    repetir j veces inicio
        deja-zumbador;
    fin;
fin;
define-nueva-instruccion division(d) como inicio
    sur; (*para que siempre regrese una respuesta sin importar la posicion en la que pongamos a karel*)
  mientras junto-a-zumbador y no-orientado-al-oeste hacer inicio
    repetir d veces inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
        fin sino inicio
            oeste; (* no hemos terminado la tarea, ya que necesitamos numeros
                          negativos en karel asi que no hacemos nada *)
        fin;
    fin;
  fin;
    si no-junto-a-zumbador y no-orientado-al-oeste entonces inicio (*no numeros negativos *)
        este;   (*significa ke o es igual o un multiplo*)
    fin;
fin;

define-nueva-instruccion algo(g) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        algo(sucede(g));
    fin sino inicio
        deja(g);
     si si-es-cero(precede(precede(g))) entonces inicio
         norte;
               mientras junto-a-zumbador hacer inicio
                   coge-zumbador;
               fin;
     fin sino inicio
        division(2);
     fin;
          si no-orientado-al-norte y no-orientado-al-este entonces inicio (*si no es 2 y no es un multiplo*)
            deja(g);
            si si-es-cero(precede(precede(precede(g)))) entonces inicio
               norte;
               mientras junto-a-zumbador hacer inicio
                   coge-zumbador;
               fin;
            fin sino inicio
               division(3);
            fin;
          fin;
                 si no-orientado-al-norte y no-orientado-al-este entonces inicio
                    deja(g);
                    si si-es-cero(precede(precede(precede(precede(precede(g)))))) entonces inicio
                        norte;
               mientras junto-a-zumbador hacer inicio
                   coge-zumbador;
               fin;
                    fin sino inicio
                        division(5);
                    fin;
                 fin;
                         si no-orientado-al-norte y no-orientado-al-este entonces inicio
                            deja(g);
                            si si-es-cero(precede(precede(precede(precede(precede(precede(precede(g)))))))) entonces inicio
                                norte;
               mientras junto-a-zumbador hacer inicio
                   coge-zumbador;
               fin;
                            fin sino inicio
                                division(7);
                            fin;
                         fin;
           si si-es-cero(precede(g))entonces inicio
               este;
           fin;
      fin;
fin;
define-nueva-instruccion busqueda como inicio
    algo(0);
    si orientado-al-este entonces inicio
    fin sino inicio
    busqueda;
    fin;
        norte;
        si frente-libre entonces inicio
            avanza;
            algo(0);
            si orientado-al-este entonces inicio
                sur;
                avanza;
            fin sino inicio
                busqueda;
            fin;
        fin;
        este;
        si frente-libre entonces inicio
            avanza;
            algo(0);
            si orientado-al-este entonces inicio
                oeste;
                avanza;
            fin sino inicio
                busqueda;
            fin;
        fin;
        sur;
        si frente-libre entonces inicio
            avanza;
            algo(0);
            si orientado-al-este entonces inicio
                norte;
                avanza;
            fin sino inicio
                busqueda;
            fin;
        fin;
        oeste;
        si frente-libre entonces inicio
            avanza;
            algo(0);
            si  orientado-al-este entonces inicio
                este;
                avanza;
            fin sino inicio
                busqueda;
            fin;
        fin;
fin;
    inicia-ejecucion
    busqueda;
        apagate;
    termina-ejecucion
finalizar-programa
