iniciar-programa
define-nueva-instruccion norte como inicio mientras no-orientado-al-norte  hacer gira-izquierda;   fin;
define-nueva-instruccion sur como  inicio mientras no-orientado-al-sur  hacer gira-izquierda; fin;
define-nueva-instruccion este como  inicio  mientras no-orientado-al-este  hacer gira-izquierda; fin;
define-nueva-instruccion oeste como inicio mientras no-orientado-al-oeste  hacer gira-izquierda; fin;


define-nueva-instruccion orienta como
    inicio
        oeste;
        mientras frente-libre hacer avanza;
        este;
    fin;

  define-nueva-instruccion desocupa(i)   como
      inicio
          mientras junto-a-zumbador hacer coge-zumbador;
          si frente-libre entonces avanza;
          mientras junto-a-zumbador y frente-libre hacer avanza;
          mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
          repetir i veces coge-zumbador;
          orienta;
      fin;

define-nueva-instruccion junta1   como
    inicio
        si junto-a-zumbador  entonces
            inicio
                coge-zumbador;
                si no-junto-a-zumbador entonces
                    inicio
                        si frente-libre entonces avanza;
                        junta1;
                    fin
                    sino
                        inicio
                            deja-zumbador;
                            si frente-libre entonces avanza;
                        fin;
            fin
            sino
                inicio
                    si frente-libre entonces avanza;
                fin;
    fin;
define-nueva-instruccion deja1(i) como
    inicio
        mientras junto-a-zumbador hacer coge-zumbador;
        repetir i veces deja-zumbador;
        mientras algun-zumbador-en-la-mochila hacer
            inicio
                deja-zumbador;
                si frente-libre entonces avanza;
            fin;
        oeste;
        mientras frente-libre hacer avanza;
        repetir i veces coge-zumbador;
    fin;

define-nueva-instruccion junta2(i) como
    inicio
       mientras frente-libre hacer
           inicio
               mientras junto-a-zumbador hacer coge-zumbador;
               si frente-libre entonces avanza;
               mientras junto-a-zumbador hacer coge-zumbador;
           fin;
       si frente-bloqueado entonces
           inicio
               oeste;
               repetir i veces deja-zumbador;
               mientras algun-zumbador-en-la-mochila hacer
                   inicio
                       deja-zumbador; deja-zumbador;
                       si frente-libre entonces avanza;
                   fin;
                   este;
                   mientras frente-libre hacer avanza;
                   repetir i veces coge-zumbador;
           fin;
           oeste;
       mientras frente-libre hacer avanza;
       este;
       deja1(i);
     fin;

define-nueva-instruccion cuentamochila(i) como
    inicio
        si algun-zumbador-en-la-mochila entonces
            inicio
                deja-zumbador;
                cuentamochila(sucede(i));
            fin
            sino
                inicio
                    mientras junto-a-zumbador hacer coge-zumbador;
                      orienta;
                      desocupa(i);

                        mientras frente-libre hacer
                                    inicio
                                         junta1;
                                    fin;
                        si no-junto-a-zumbador entonces
                             inicio
                                orienta;
                                mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                repetir i veces coge-zumbador;
                             fin;
                        si junto-a-zumbador entonces
                            inicio
                                coge-zumbador;
                                si no-junto-a-zumbador entonces
                                    inicio
                                        orienta;
                                        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                        repetir i veces coge-zumbador;
                                    fin
                                    sino
                                        inicio
                                            deja-zumbador;
                                            orienta;
                                            mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                            repetir i veces coge-zumbador;
                                        fin;
                            fin;
                      si frente-libre entonces avanza;
                      junta2(i);
                  fin;
 fin;
    inicia-ejecucion
       cuentamochila(0);
        apagate;
    termina-ejecucion
finalizar-programa
