iniciar-programa
define-nueva-instruccion g(d) como repetir d veces gira-izquierda;
 define-nueva-instruccion cuenta(f) como inicio
  si frente-libre entonces inicio
   avanza;
   cuenta(sucede(f));
 fin;
 mientras junto-a-zumbador hacer coge-zumbador;
 repetir f veces deja-zumbador;
 apagate;
 fin;
define-nueva-instruccion mexico(s) como inicio
  si junto-a-zumbador entonces inicio
     coge-zumbador;
     mexico(sucede(s));
  fin;
   si orientado-al-norte entonces inicio
   avanza;
   repetir s veces deja-zumbador;
  si izquierda-bloqueada y orientado-al-norte entonces inicio
  g(2);
  avanza;
  g(1);
  fin;
  si  orientado-al-norte entonces inicio
  g(2);
   avanza;
  g(3);
  fin;
   fin;
  si si-es-cero (s) entonces inicio
    g(2);
    avanza;
      g(2);
     deja-zumbador;
    sal-de-instruccion;
  fin;
  avanza;
fin;
define-nueva-instruccion mexico2(z) como inicio
  si junto-a-zumbador entonces inicio
      coge-zumbador;
     mexico2(sucede(z));
  fin;
  si orientado-al-norte entonces inicio
    repetir z veces deja-zumbador;
  si izquierda-bloqueada y orientado-al-norte entonces inicio
   g(2);
    avanza;
   g(1);
  fin;
  si  orientado-al-norte entonces inicio
   g(2);
    avanza;
   g(3);
  fin;
    mientras no-junto-a-zumbador hacer avanza;
   coge-zumbador;
   fin;
  si si-es-cero (z) entonces inicio
     deja-zumbador;
    sal-de-instruccion;
  fin;
   avanza;
  si junto-a-zumbador entonces inicio
    g(2);
   cuenta(0);
  fin;
fin;
    inicia-ejecucion
      mexico(0);
      mientras frente-libre hacer avanza;
      g(1);
      mexico(0);
      mientras frente-libre hacer avanza;
      g(3);
      avanza;
      mientras frente-libre hacer inicio
      mexico2(0);
      mientras frente-libre hacer avanza;
      g(1);
      avanza;
      mexico2(0);
      mientras frente-libre hacer avanza;
      g(3);
      avanza;
      fin;
      apagate;
    termina-ejecucion
finalizar-programa
