iniciar-programa
define-nueva-instruccion g(q) como repetir q veces gira-izquierda;
define-nueva-instruccion cuenta(z) como inicio
si junto-a-zumbador entonces inicio
coge-zumbador;
cuenta(sucede(z));
fin;
si orientado-al-oeste entonces inicio
mientras no-orientado-al-norte hacer gira-izquierda;
avanza;
fin;
si orientado-al-este entonces inicio
  g(2);
  mientras no-junto-a-zumbador y frente-libre hacer avanza;
  si no-junto-a-zumbador entonces g(1);
  si junto-a-zumbador entonces inicio
  g(2);
  avanza;
  g(3);
  fin;
fin;
 si si-es-cero (z) y orientado-al-sur entonces inicio
   g(1);
  si frente-libre entonces avanza;
   mientras no-junto-a-zumbador y frente-libre hacer avanza;
   sal-de-instruccion;
 fin;
 si si-es-cero (z) entonces sal-de-instruccion;
  deja-zumbador;
fin;
  define-nueva-instruccion persona(x) como inicio
    si junto-a-zumbador entonces inicio
      coge-zumbador;
      persona(sucede(x));
    fin;
    si no-junto-a-zumbador y orientado-al-oeste y frente-bloqueado entonces inicio
      g(1);
      avanza;
      g(1);
    fin;
    si si-es-cero (x) entonces sal-de-instruccion;
     avanza;
  fin;
  define-nueva-instruccion colados(i) como inicio
   si junto-a-zumbador y orientado-al-oeste entonces inicio
     coge-zumbador;
       colados(sucede(i));
   fin;
    si no-junto-a-zumbador y orientado-al-oeste y izquierda-libre entonces inicio
    avanza;
    coge-zumbador;
    persona(0);
    g(2);
    fin;
    si si-es-cero (i) entonces sal-de-instruccion;
     inicio
        avanza;
        si no-junto-a-zumbador entonces avanza;
        cuenta(0);
        g(2);
        avanza;
        g(3);
     fin;
  fin;
    define-nueva-instruccion baja(x) como inicio
       si junto-a-zumbador entonces inicio
          coge-zumbador;
          baja(sucede(x));
       fin;
       si orientado-al-este entonces inicio
        g(2);
        mientras frente-libre hacer avanza;
        g(1);
        avanza;
        g(1);
        mientras junto-a-zumbador hacer avanza;
        g(2);
       fin;
       si si-es-cero (x) entonces inicio
        mientras frente-libre hacer avanza;
        g(3);
        avanza;
        g(3);
        mientras no-junto-a-zumbador y frente-libre hacer avanza;
        sal-de-instruccion;
       fin;
       deja-zumbador;
    fin;
    inicia-ejecucion
       mientras no-orientado-al-norte hacer g(1);
       avanza;
       g(3);
       avanza;
       g(2);
       colados(0);
       g(2);
       mientras no-junto-a-zumbador hacer avanza;
      mientras junto-a-zumbador hacer cuenta(0);
      g(2);
      mientras frente-libre hacer avanza;
      g(3);
      avanza;
      g(3);
      mientras no-junto-a-zumbador y frente-libre hacer avanza;
     mientras junto-a-zumbador hacer  baja(0);
        apagate;
    termina-ejecucion
finalizar-programa
