iniciar-programa
define-nueva-instruccion abajo como
 inicio
    mientras no-orientado-al-oeste hacer gira-izquierda;
    mientras frente-libre hacer avanza;
    gira-izquierda;
    mientras frente-libre hacer avanza;
    repetir 2 veces gira-izquierda;
 fin;
  define-nueva-instruccion trae como
   inicio
     si junto-a-zumbador entonces
       inicio
         coge-zumbador;
          trae;
          deja-zumbador;
       fin
       sino
       avanza;
   fin;
 define-nueva-instruccion ordena como
  inicio
     si junto-a-zumbador entonces
       inicio
        coge-zumbador;
         avanza;
          repetir 2 veces gira-izquierda;
          ordena;
          deja-zumbador;

       fin
        sino
         si orientado-al-oeste entonces
            inicio
            avanza;
            gira-izquierda;
            gira-izquierda;
            trae;
            repetir 2 veces gira-izquierda;
          fin;

          avanza;
          repetir 2 veces gira-izquierda;
    fin;
    define-nueva-instruccion lleva(n) como
      inicio
       si junto-a-zumbador entonces
        inicio
        coge-zumbador;
        lleva(sucede(n));
        fin;
         abajo;
         repetir n veces deja-zumbador;
         apagate;


      fin;
 define-nueva-instruccion cue (n) como
  inicio
   si junto-a-zumbador y frente-libre entonces
     inicio
       avanza;
       cue(sucede(n));
      fin;
      repetir 2 veces gira-izquierdA;
      si no-junto-a-zumbador  y frente-libre entonces avanza;
      repetir n veces
       inicio
          mientras frente-libre hacer
          inicio
          ordena;
          mientras no-orientado-al-oeste hacer gira-izquierda;
          fin;
          si frente-bloqueado entonces
           inicio
            repetir 2 veces gira-izquierda;
            mientras junto-a-zumbador y frente-libre hacer avanza;
            repetir 2 veces gira-izquierda;
           si no-junto-a-zumbador  y frente-libre entonces avanza;
          fin;
       fin;
      lleva(0);

   fin;

 define-nueva-instruccion regresa como
  inicio
   mientras no orientado-al-oeste hacer gira-izquierda;
   mientras frente-libre hacer avanza;
   repetir 3 veces gira-izquierda;
   si frente-libre entonces avanza;
   repetir 3 veces gira-izquierda;
   mientras no-junto-a-zumbador y frente-libre hacer avanza;
   si frente-bloqueado y no junto-a-zumbador entonces
    inicio
     repetir 3 veces gira-izquierda;
     si frente-libre entonces avanza;
     repetir 3 veces gira-izquierda;
     mientras frente-libre hacer avanza;
     repetir 2 veces gira-izquierda;
     cue(0);
    fin;
   fin;

 define-nueva-instruccion recorre(n) como
   inicio

      si junto-a-zumbador entonces
       inicio
        mientras junto-a-zumbador hacer coge-zumbador;
        si frente-libre entonces avanza;
         recorre(sucede(n));
       fin;
       si no-junto-a-zumbador entonces
        inicio
         repetir 3 veces gira-izquierda;
         si frente-libre entonces avanza;
         repetir 3 veces gira-izquierda;
         mientras frente-libre hacer avanza;
         repetir 2 veces gira-izquierda;
         mientras junto-a-zumbador y frente-libre hacer avanza;
         repetir n veces deja-zumbador;
         regresa;
         recorre(0);
        fin;



    fin;
 define-nueva-instruccion cuenta(n) como
   inicio
   si junto-a-zumbador entonces
     inicio
      coge-zumbador;
      cuenta (sucede(n));
     fin;
    repetir 4 veces si frente-libre entonces avanza;
    repetir 3 veces gira-izquierda;
    mientras frente-libre hacer
      inicio
      si junto-a-zumbador entonces
       inicio
        repetir n veces
         inicio
          si junto-a-zumbador entonces coge-zumbador
          sino
          repetir n veces deja-zumbador;


         fin;

         si no-junto-a-zumbador entonces
          repetir n veces deja-zumbador
          sino
          mientras junto-a-zumbador hacer coge-zumbador;


           si frente-libre y no-orientado-al-norte entonces avanza;
           si orientado-al-norte entonces
           inicio
             mientras no-orientado-al-oeste hacer gira-izquierda;
             mientras frente-libre hacer avanza;
             repetir 2 veces gira-izquierda;
             mientras no junto-a-zumbador y frente-libre hacer
             avanza;
           recorre(0);
          fin;
           si frente-bloqueado entonces gira-izquierda;
         fin
         sino
          inicio
         si frente-libre y no orientado-al-norte entonces avanza;
         si orientado-al-norte entonces
         inicio
             mientras no-orientado-al-oeste hacer gira-izquierda;
             mientras frente-libre hacer avanza;
             repetir 2 veces gira-izquierda;
             mientras no junto-a-zumbador y frente-libre hacer
             avanza;
             recorre(0);
         fin;
         fin;

       fin;


   fin;
    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira-izquierda;
    si derecha-bloqueada entonces
     inicio
     si frente-libre entonces avanza;
     si junto-a-zumbador entonces coge-zumbador;
     repetir 2 veces gira-izquierda;
     si frente-libre entonces avanza;
     deja-zumbador;
     apagate;
     fin;
    abajo;
    repetir 3 veces gira-izquierda;
    repetir 2 veces si frente-libre entonces avanza;
   si junto-a-zumbador entonces
   repetir 200 veces coge-zumbador;
    abajo;
    si frente-libre entonces avanza;
    cuenta(0);


        apagate;
    termina-ejecucion
finalizar-programa
