iniciar-programa
Define-nueva-instruccion gira(x) como
 Repetir x veces gira-izquierda;

Define-nueva-instruccion elije como
  Si izquierda-libre entonces  Gira-izquierda    sino gira(3);

Define-nueva-instruccion avanzar(x) como
 inicio
    gira(x);
    avanza;
 fin;
Define-nueva-instruccion Back como
   Mientras no-junto-a-zumbador hacer inicio
    Mientras frente-libre y no-junto-a-zumbador hacer avanza;
    Si frente-bloqueado y no-junto-a-zumbador entonces
        elije;
   fin;

Define-nueva-instruccion ld como
 inicio
    Si izquierda-bloqueada y derecha-libre y frente-libre entonces
     inicio
         gira(2);
           Si frente-bloqueado entonces
            inicio
               avanzar(2);
               ld;
            fin
            sino
              gira(2);
     fin;
     Si no-junto-a-zumbador entonces
       deja-zumbador;
     Si frente-libre y derecha-bloqueada entonces
      inicio
       avanza;
       ld;
      fin
      sino
       Si frente-bloqueado entonces inicio
         avanzar(3);
          ld;
       fin;
 fin;

Define-nueva-instruccion  lu   como
 inicio
    Si frente-libre y derecha-bloqueada y izquierda-libre entonces
     inicio
       gira(2);
       Si frente-bloqueado entonces
        inicio
           avanzar(2);
           lu;
        fin
        sino
         gira(2);
    fin;
    si no-junto-a-zumbador entonces deja-zumbador;
    Si frente-libre y izquierda-bloqueada entonces
     inicio
       avanza;
       lu;
     fin
     sino
      si frente-bloqueado entonces
       inicio
        avanzar(1);
         lu;
       fin;
fin;

Define-nueva-instruccion  compara(n)   como
 inicio
     Si no(si-es-cero(n)) entonces
      inicio
          Si frente-libre y derecha-bloqueada entonces
           inicio
            avanza;
            compara(precede(n));
           fin
           sino
            si frente-bloqueado entonces
             inicio
                avanzar(3);
               compara(precede(n));
             fin
             sino
               si derecha-libre entonces
                inicio
                   gira(2);
                   Back;
                   gira(2);
                fin;
     fin;
 fin;
Define-nueva-instruccion BuscaCam(n)  como
 inicio
     Si frente-libre y izquierda-libre y derecha-bloqueada entonces
      inicio
        gira(2);
         Si frente-bloqueado entonces
            inicio
              avanzar(2);
               BuscaCam(sucede(n));
            fin
           sino
            inicio
               Back;
               Compara(n);
               Si no-junto-a-zumbador entonces
                inicio
                  gira(2);
                   Back;
                   lu;
                   avanzar(1);
                  gira(3);
                   Si no-junto-a-zumbador entonces
                     inicio
                        Deja-zumbador;
                         BuscaCam(0);
                     fin;
                 fin
                sino
                 inicio
                    ld;
                      avanzar(3);
                      gira(3);
                    Si no-junto-a-zumbador entonces
                      inicio
                        Deja-zumbador;
                        BuscaCam(0);
                       fin;
                   fin;
              fin;
          fin
          Sino
             Si frente-libre y izquierda-bloqueada entonces inicio
               avanza;
                Buscacam(sucede(n));
             fin
             sino
              si frente-bloqueado entonces
               inicio
                  elije;
                  avanza;
                 Buscacam(sucede(n));
               fin
               sino
                Si izquierda-libre entonces
                 inicio
                    gira(2);
                   Back;
                   compara(n);
                   Si no-junto-a-zumbador entonces
                    inicio
                        gira(2);
                        Back;
                       lu;
                       avanzar(1);
                         gira(3);
                    fin
                    sino
                     inicio
                       ld;
                       avanzar(3);
                       gira(3);
                     fin;
                    Si no-junto-a-zumbador entonces
                         inicio
                           deja-zumbador;
                           BuscaCam(0);
                         fin;
                 fin;
 fin;

    inicia-ejecucion
     Si  no(junto-a-zumbador) entonces
        inicio
           deja-zumbador;
            Mientras frente-bloqueado hacer
               gira-izquierda;
            Mientras frente-libre hacer avanza;
            Si  izquierda-libre entonces
               inicio
                   gira(2);
                  Mientras frente-libre y no-junto-a-zumbador hacer
                   avanza;
                  gira(2);
               fin
               sino
                 Si derecha-libre entonces
                  inicio
                     gira(2);
                     Mientras frente-libre y no-junto-a-zumbador hacer
                       avanza;
                  fin;
              BuscaCam(0);
         fin
        sino
          apagate;
        apagate;
    termina-ejecucion
finalizar-programa
 