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

define-nueva-instruccion colocar(x) como
inicio
 mientras junto-a-zumbador y orientado-al-norte hacer
   inicio
     coge-zumbador;
     si no-junto-a-zumbador entonces
       inicio
         avanza;
         este;
         repetir x veces avanza;
         deja-zumbador;
       fin;
     colocar(sucede(x));

   fin;
fin;

define-nueva-instruccion colados como
inicio
  mientras junto-a-zumbador y orientado-al-norte hacer
    inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces
        inicio
          oeste;
          avanza;
          norte;
          avanza;
          este;
          mientras no-junto-a-zumbador y frente-libre hacer avanza;
          oeste;
        fin;
       colados;
       si orientado-al-oeste entonces
         inicio
           avanza;
           repetir 2 veces deja-zumbador;
         fin;
    fin;
fin;

define-nueva-instruccion quitar como
inicio
  mientras junto-a-zumbador y orientado-al-este hacer
    inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces
        inicio
          norte;
          avanza;
        fin;
      quitar;
      deja-zumbador;
    fin;
fin;

define-nueva-instruccion ordenar como
inicio
 mientras junto-a-zumbador y orientado-al-oeste hacer
   inicio
     coge-zumbador;
     si no-junto-a-zumbador entonces
       inicio
         mientras frente-libre hacer avanza;
         este;
         mientras junto-a-zumbador y frente-libre hacer avanza;
       fin;
     ordenar;
     deja-zumbador;
   fin;
fin;

define-nueva-instruccion cola como
inicio
  mientras junto-a-zumbador y orientado-al-oeste hacer
    inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces
        inicio
          oeste;
          mientras frente-libre hacer avanza;
          sur;
          avanza;
          este;
          mientras junto-a-zumbador hacer avanza;
        fin;
      cola;
      deja-zumbador;
    fin;
fin;


    inicia-ejecucion
    norte;
    avanza;
    colocar(0);
    oeste;
    mientras frente-libre hacer avanza;
    sur;
    avanza;
    este;
    avanza;
    norte;
    colados;
    mientras frente-libre hacer avanza;
    sur;
    mientras frente-libre hacer avanza;
    norte;
    repetir 2 veces avanza;
    este;
    mientras orientado-al-este hacer
      inicio
        mientras no-junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces
          inicio
            coge-zumbador;
            si junto-a-zumbador entonces
              inicio
                coge-zumbador;
                sur;
                repetir 2 veces avanza;
                este;
                quitar;
                avanza;
                oeste;
                mientras frente-libre hacer avanza;
                este;
              fin
            sino sur;
          fin;
      fin;

    mientras frente-libre hacer avanza;
    oeste;
    mientras frente-libre hacer avanza;
    este;
    mientras orientado-al-este hacer
      inicio
        oeste;
        mientras frente-libre hacer avanza;
        este;
        mientras junto-a-zumbador y frente-libre hacer avanza;
        mientras no-junto-a-zumbador y frente-libre hacer avanza;
        si junto-a-zumbador entonces
          inicio
            oeste;
            ordenar;
          fin
        sino oeste;
      fin;
   mientras frente-libre hacer avanza;
   norte;
   avanza;
   este;
   mientras orientado-al-este hacer
     inicio
       mientras no-junto-a-zumbador y frente-libre hacer avanza;
       si junto-a-zumbador entonces
         inicio
           oeste;
           cola;
           oeste;
           mientras frente-libre hacer avanza;
           norte;
           avanza;
           este;
         fin
       sino oeste;
     fin;
        apagate;
    termina-ejecucion
finalizar-programa
