iniciar-programa
 Define-nueva-instruccion gira(n) como
    Repetir n  veces gira-izquierda;
 Define-nueva-instruccion Mv como
   inicio
     gira(2);
     avanza;
     gira(2);
   fin;

 Define-nueva-instruccion Compara(n) como
  inicio
      Si junto-a-zumbador y no(si-es-cero(n)) entonces
        inicio
              coge-zumbador;
              Compara(precede(n));
              Si orientado-al-norte entonces
                deja-zumbador;
        fin
      Sino
        inicio
            Si si-es-cero(n) y junto-a-zumbador entonces
                 gira(1);
        fin;
  fin;
 Define-nueva-instruccion Escribe(k) como
   inicio
      compara(k);
      Si orientado-al-oeste entonces
          inicio
               Mientras junto-a-zumbador hacer coge-zumbador;
                Repetir k veces deja-zumbador;
          fin;
   fin;
Define-nueva-instruccion  Respuesta(k) como
   inicio
      Si orientado-al-norte entonces
        inicio
            Escribe(k);
            Mientras no-orientado-al-norte hacer  gira-izquierda;
        fin
      sino
        si orientado-al-sur entonces
          inicio
              gira(2);
              Escribe(k);
               Mientras no-orientado-al-sur hacer  gira-izquierda;
          fin
        sino
          si orientado-al-oeste entonces
            inicio
                gira(3);
                Escribe(k);
                 Mientras no-orientado-al-oeste hacer  gira-izquierda;
            fin
         sino
            inicio
                gira(1);
                Escribe(k);
                 Mientras no-orientado-al-este hacer  gira-izquierda;
            fin;
   fin;

 Define-nueva-instruccion RecorreMundo(k) como
  inicio
   Si no-junto-a-zumbador entonces
    inicio
      Repetir 4 veces
        inicio
            Si frente-libre entonces
              inicio
                 si no-junto-a-zumbador entonces
                   deja-zumbador;
                 avanza;
                 Si no-junto-a-zumbador entonces
                   inicio
                      Mv;
                      Avanza;
                     RecorreMundo(sucede(k));
                       gira(2);
                     Si junto-a-zumbador entonces
                           coge-zumbador;
                     avanza;
                     gira(2);
                   fin
                sino
                 inicio
                    coge-zumbador;
                    Si no-junto-a-zumbador entonces
                      inicio
                        deja-zumbador;
                        Mv;
                      fin
                    sino
                      inicio
                           deja-zumbador;
                           Mv;

                           Avanza;
                           RecorreMundo(sucede(k));
                            Mv;
                      fin;
                 fin;
              Fin;
            gira(1);
        fin;
    fin
   Sino
    inicio
        (* Es posible que este para sobre la salida *)
    Si junto-a-zumbador entonces
          inicio
               coge-zumbador;
               Si junto-a-zumbador entonces
                  inicio
                       coge-zumbador;
                       Si no-junto-a-zumbador entonces
                          inicio
                              (* Si es la primera vez que se visita *)
                              Repetir k veces deja-zumbador;
                              Repetir 2 veces deja-zumbador;
                          fin
                       Sino
                          inicio
                                 Respuesta(k);
                                 Repetir 2 veces deja-zumbador;
                          fin;
                  fin
               sino
                deja-zumbador;
          fin;
    fin;

  fin;
 Define-nueva-instruccion quita como
   inicio
      Si no-junto-a-zumbador entonces
        inicio
             deja-zumbador;
                   Repetir 4  veces
                     inicio
                         si frente-libre entonces
                           inicio
                             Avanza;
                             quita;
                             mv;
                           fin;
                          gira(1);
                     fin;
         fin
     sino
       inicio
         coge-zumbador;
          si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                apagate;
            fin
         sino
           deja-zumbador;
       fin;
   fin;
    inicia-ejecucion
    si junto-a-zumbador entonces
       inicio
         Repetir 2 veces coge-zumbador;
         apagate;
        fin;
    RecorreMundo(0);
    si junto-a-zumbador entonces coge-zumbador;
    Quita;
        apagate;
    termina-ejecucion
finalizar-programa
