iniciar-programa
define-nueva-instruccion d como
  inicio
  repetir 3 veces gira-izquierda;
 fin;
define-nueva-instruccion v como
  inicio
    repetir 2 veces gira-izquierda;
  fin;

define-nueva-instruccion ord(n) como
  inicio
   si junto-a-zumbador entonces
     inicio
       coge-zumbador;
       ord(sucede(n));
     fin;
     si no-orientado-al-oeste entonces
      inicio
         mientras no-orientado-al-oeste hacer gira-izquierda;
         mientras frente-libre hacer avanza;
          d;
         si frente-libre entonces avanza;
          d;
         repetir n veces avanza;
          deja-zumbador;
          mientras no-orientado-al-oeste hacer gira-izquierda;
        fin;

  fin;
  define-nueva-instruccion regresa como
    inicio
     mientras no-orientado-al-oeste hacer gira-izquierda;
     mientras frente-libre hacer avanza;
     gira-izquierda;
     si frente-libre entonces avanza;
     gira-izquierda;

    fin;
   define-nueva-instruccion dis(n) como
     inicio
       si no-junto-a-zumbador y frente-libre entonces
         inicio
           avanza;
           dis(sucede(n));
         fin;
        si junto-a-zumbador entonces
         inicio
          si no-orientado-al-oeste entonces
         inicio
          regresa;
         repetir n veces
           inicio
             si junto-a-zumbador  entonces
               coge-zumbador
             sino
               inicio
                 si no-orientado-al-norte entonces
                    inicio
                      repetir n veces deja-zumbador;
                      mientras no-orientado-al-norte hacer gira-izquierda;
                     fin;
                  fin;
             fin;
             si junto-a-zumbador y no-orientado-al-norte entonces
               inicio
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir n veces deja-zumbador;
               fin
              sino
                inicio
                si junto-a-zumbador entonces
                  coge-zumbador
                 sino
                  repetir n veces deja-zumbador;
                fin;  

            mientras no-orientado-al-oeste hacer gira-izquierda;
           fin;
         fin
        sino
        apagate;

      fin;

  define-nueva-instruccion prim (n) como
    inicio
      si no-junto-a-zumbador y frente-libre entonces
        inicio
          avanza;
          prim(sucede(n));
         fin;
         si no-orientado-al-oeste entonces
           inicio
            regresa;
            repetir n veces deja-zumbador;
            mientras no-orientado-al-oeste hacer gira-izquierda;
          fin;


    fin;

    inicia-ejecucion
      mientras no-orientado-al-este hacer gira-izquierda;
       mientras frente-libre hacer
         inicio
          mientras no-junto-a-zumbador y frente-libre hacer avanza;
           si junto-a-zumbador entonces
             inicio
              coge-zumbador;
               ord(0);
               regresa;
             fin;
         fin;
        v;
        mientras frente-libre hacer avanza;
        d;
        si frente-libre entonces avanza;
        d;
         mientras no-junto-a-zumbador y frente-libre hacer
             avanza;
             si junto-a-zumbador entonces
               inicio
                coge-zumbador;
                prim(0);
               fin;
            d;
           si frente-libre entonces avanza;
           d;
        mientras frente-libre hacer
          inicio
            mientras no-junto-a-zumbador y frente-libre hacer
             avanza;
             si junto-a-zumbador entonces
               inicio
                coge-zumbador;
                dis(0);
               fin;
                d;
               si frente-libre entonces avanza;
               d;
           fin;



        apagate;
    termina-ejecucion
finalizar-programa
