            iniciar-programa
  define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
  define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
  define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
  define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion cuenta(i) como
    inicio
         si junto-a-zumbador entonces
             inicio
                 coge-zumbador;
                 cuenta(sucede(i));
             fin sino
                 inicio
                     mientras no junto-a-zumbador y frente-libre hacer avanza;
                     si frente-bloqueado y no junto-a-zumbador entonces
                         inicio
                             oeste;
                             mientras frente-libre hacer avanza;
                             norte;
                             repetir i veces deja-zumbador;
                             apagate;
                         fin;
                     cuenta(i);
                 fin;
    fin;
define-nueva-instruccion repetidos como
    inicio
        si no junto-a-zumbador entonces
            inicio
                este;
                mientras no junto-a-zumbador hacer avanza;
                cuenta(0);
                apagate;
            fin;
        si junto-a-zumbador y frente-libre entonces avanza;
        si frente-bloqueado y junto-a-zumbador y orientado-al-oeste entonces
            inicio
                este;
                cuenta(0);


            fin;
        si junto-a-zumbador entonces
            inicio
                este;
                si frente-libre entonces avanza;
                sur;
                mientras junto-a-zumbador   hacer
                    inicio
                        coge-zumbador;
                        si frente-libre entonces avanza;
                    fin;
                oeste;
                si frente-libre entonces avanza;
                norte;
                mientras junto-a-zumbador y frente-libre hacer avanza;
                sur;
                si frente-libre entonces avanza;
                oeste;
                repetidos;
            fin;
         si no junto-a-zumbador entonces
             inicio
                 gira-izquierda;
                 mientras no junto-a-zumbador y frente-libre hacer avanza;
                 oeste;
                 repetidos;
             fin;
    fin;
define-nueva-instruccion expander(i) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                expander(sucede(i));
            fin sino
                inicio
                    norte;
                    repetir i veces
                        inicio
                            deja-zumbador;
                            si frente-libre entonces avanza;
                        fin;
                    sur;
                    mientras frente-libre hacer avanza;
                    oeste;
                    si frente-bloqueado entonces
                        inicio
                            este;
                            mientras frente-libre hacer avanza;
                            norte;
                            mientras junto-a-zumbador y frente-libre hacer avanza;
                            sur;
                            si frente-libre entonces avanza;
                            oeste;
                            repetidos;
                            apagate;
                        fin;
                    si frente-libre entonces avanza;
                    norte;
                    sal-de-instruccion;
                    expander(i);
                fin;
    fin;
  define-nueva-instruccion todo3 como
      inicio
          expander(0);
          expander(0);
          todo3;
      fin;
 define-nueva-instruccion llevar como
     inicio
         mientras frente-libre hacer avanza;
         oeste;
         mientras frente-libre hacer avanza;
         sur;
         mientras no junto-a-zumbador y frente-libre hacer avanza;
         si frente-bloqueado y no junto-a-zumbador entonces
             inicio
                 este;
                 mientras frente-libre hacer avanza;
                 norte;
                 todo3;
             fin;
     fin;
 define-nueva-instruccion ordenar(i) como
     inicio
          si junto-a-zumbador y frente-libre entonces
              inicio
                  coge-zumbador;
                  si frente-libre entonces avanza;

                  ordenar(sucede(i));
              fin sino
                  inicio
                      si frente-bloqueado y junto-a-zumbador entonces
                          inicio
                              coge-zumbador;
                          fin;

                      este;
                      si frente-libre entonces avanza;
                      mientras no junto-a-zumbador y frente-libre hacer avanza;
                      si frente-bloqueado y no junto-a-zumbador entonces
                          inicio
                              repetir i veces deja-zumbador;
                              deja-zumbador;
                              norte;
                              sal-de-instruccion;
                          fin sino
                              inicio
                                  oeste;
                                  si frente-libre entonces avanza;
                                  si frente-bloqueado y no junto-a-zumbador entonces
                                      inicio
                                              este;
                                              repetir i veces deja-zumbador;
                                              deja-zumbador;
                                              mientras frente-libre hacer avanza;
                                              norte;
                                              todo3;
                                              apagate;
                                      fin;
                                  este;
                                  repetir i veces deja-zumbador;
                                  deja-zumbador;
                                  mientras frente-libre hacer avanza;
                                  norte;
                                  sal-de-instruccion;
                              fin;
                  fin;
     fin;
define-prototipo-instruccion todo2 ;
define-nueva-instruccion acomodar(i) como
          inicio
               si junto-a-zumbador entonces
                   inicio
                       coge-zumbador;
                       acomodar(sucede(i));
                   fin sino
                       inicio
                         oeste;
                         mientras frente-libre hacer avanza;
                         norte;
                          repetir i veces
                              inicio
                                  deja-zumbador;
                                  si frente-libre entonces avanza;
                              fin;
                        sur;
                        mientras frente-libre hacer avanza;
                        este;
                        si  frente-libre entonces avanza;
                        mientras no junto-a-zumbador y frente-libre hacer avanza;
                        norte;
                        si derecha-bloqueada y no junto-a-zumbador entonces
                            inicio
                                todo2;
                            fin;
                        sal-de-instruccion;
                        acomodar(i);

                       fin;

             fin;
    define-nueva-instruccion todo2 como
        inicio
             llevar;
             ordenar(0);
             todo2;
        fin;
   define-nueva-instruccion todo como
       inicio
            acomodar(0);
            acomodar(0);
            todo;
       fin;

   inicia-ejecucion
   norte;
   si no junto-a-zumbador entonces
       inicio
           apagate;
       fin;
 este;
 mientras no junto-a-zumbador y frente-libre  hacer avanza;
 norte;
 todo;


        apagate;
    termina-ejecucion
finalizar-programa



