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 orientate como inicio
    sur;
    mientras frente-libre hacer avanza;
    oeste;
    mientras frente-libre hacer avanza;
    este;

fin;
define-nueva-instruccion pisos(n) como inicio
    si junto-a-zumbador  o frente-bloqueado y no derecha-bloqueada entonces inicio
        oeste;
        mientras no junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            si frente-libre entonces inicio
               avanza;
               mientras frente-libre y no junto-a-zumbador hacer avanza;
               si frente-bloqueado y derecha-bloqueada y junto-a-zumbador entonces inicio
                  este;

               fin;
               si frente-bloqueado y derecha-bloqueada y no junto-a-zumbador entonces inicio
                   este;
                   mientras frente-libre hacer avanza;
                   sur;
                   si frente-libre entonces avanza;
                   este;
               fin;
               pisos(sucede(n));
            fin
            sino inicio

               este;
               mientras frente-libre hacer avanza;
               sur;
               si frente-libre entonces avanza;
               este;
               pisos(sucede(n));

            fin;



        fin;
        si frente-bloqueado y derecha-bloqueada entonces inicio
          este;
          mientras frente-libre hacer avanza;

            sur;
               si frente-libre entonces avanza;
               este;
               pisos(n);
        fin;
       si frente-bloqueado y derecha-libre entonces inicio
               este;
               mientras frente-libre hacer avanza;
               sur;
               si frente-libre entonces avanza;
               este;
               pisos(n);
            fin;
    fin;

     si no junto-a-zumbador entonces inicio
         orientate;
         mientras junto-a-zumbador y frente-libre hacer avanza;
         si no junto-a-zumbador entonces inicio
             repetir n veces deja-zumbador;
          fin;
         
         si frente-bloqueado y junto-a-zumbador entonces inicio
             apagate;
         fin;
         si frente-libre entonces avanza;
         oeste;
         mientras frente-libre hacer avanza;
         norte;
         mientras frente-libre hacer avanza;
         este;
         mientras  frente-libre hacer avanza;
         pisos(0);

     fin;
fin;
    inicia-ejecucion
        norte;
        mientras frente-libre hacer avanza;
        este;
        mientras frente-libre hacer avanza;
        pisos(0);
        apagate;
    termina-ejecucion
finalizar-programa                     
