iniciar-programa
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 norte como inicio
mientras no-orientado-al-norte hacer gira-izquierda; fin;

define-nueva-instruccion oeste como inicio
mientras no-orientado-al-oeste hacer gira-izquierda; fin;

define-nueva-instruccion resuelve(z) como inicio

si junto-a-zumbador y frente-bloqueado entonces
   inicio
     coge-zumbador;
     resuelve(precede(z));
   fin
   sino
   inicio
       repetir z veces
       inicio
       si algun-zumbador-en-la-mochila entonces
       deja-zumbador;
       si ningun-zumbador-en-la-mochila entonces apagate;
       fin;
       deja-zumbador;
       apagate;
      fin;
   fin;



                                     
define-nueva-instruccion regresa como inicio
sur;
avanza;
norte;
deja-zumbador;
avanza;
sur;


fin;

define-nueva-instruccion bajada(b)como inicio
si orientado-al-norte entonces inicio norte; avanza; sur; fin;
 si junto-a-zumbador entonces
    inicio
        oeste;
        coge-zumbador;
        regresa;
        bajada(b);
        deja-zumbador;

    fin
    sino
    inicio
      si junto-a-zumbador entonces
      inicio
       avanza;
       sur;
       fin
       sino
       inicio

       fin;

      fin;

fin;


define-nueva-instruccion subida(s) como inicio

 si orientado-al-sur entonces
    inicio
       sur;
       avanza;
       norte;
    fin;

   si junto-a-zumbador entonces
      inicio
          si no si-es-cero(s) entonces
          inicio
            coge-zumbador;
            subida(precede(s));
            deja-zumbador;
          fin
          sino
          avanza;

      fin
      sino
      inicio
          avanza;

      fin;

   este;
fin;


define-nueva-instruccion conducirSubida(n) como inicio
si frente-libre entonces
   inicio

       subida(n);
   fin;

fin;



define-nueva-instruccion capacidad(a) como inicio
si junto-a-zumbador y orientado-al-norte entonces
   inicio
        si junto-a-zumbador y orientado-al-norte entonces
          inicio
            coge-zumbador;
            capacidad(sucede(a));
             resuelve(a);
           fin;
    fin
    sino
    inicio
      si orientado-al-norte entonces
         inicio
      este;
      si frente-libre entonces
         inicio
            avanza;
         fin
         sino
         inicio

         repetir a veces deja-zumbador;

         sal-de-instruccion;

         fin;


      norte;
         fin;
   fin;







    si orientado-al-norte entonces
        inicio
        bajada(a);
        si junto-a-zumbador entonces
        inicio
           avanza;
           sur;
        fin
        sino
        inicio
          avanza;
          sur;
        fin;


        fin;



                   


si orientado-al-sur y no-junto-a-zumbador entonces conducirSubida(a);

     si junto-a-zumbador y orientado-al-este entonces
          inicio

            coge-zumbador;
            capacidad(precede(a));
            sal-de-instruccion;
            (*apagate forzado*)
          fin
          sino
          inicio
           (*Bajada de pasajeros*)


           si junto-a-zumbador entonces
               inicio
                 coge-zumbador;
                 capacidad(sucede(a));
                 sal-de-instruccion;
               fin
               sino
               inicio

                   norte;
               fin;




            fin;
        capacidad(a);
        sal-de-instruccion;
fin;

  inicia-ejecucion


 norte;


  capacidad(0);

        apagate;
    termina-ejecucion
finalizar-programa
