iniciar-programa
  define-nueva-instruccion media-vuelta como inicio
    gira-izquierda;
    gira-izquierda;
  fin;
  define-nueva-instruccion gira-derecha como inicio
    gira-izquierda;
    gira-izquierda;
    gira-izquierda;
  fin;
  define-nueva-instruccion pir(n) como inicio
   si no si-es-cero (n) entonces inicio
     repetir n veces inicio
        avanza;
        si no-junto-a-zumbador entonces inicio
          deja-zumbador;
        fin;
      fin;
      media-vuelta;
      repetir n veces inicio
        avanza;
      fin;
      media-vuelta;
      avanza;
      gira-izquierda;
      avanza;
      gira-derecha;
      pir(precede(precede(n)));
    fin;
    si no-junto-a-zumbador entonces inicio
       deja-zumbador;
     fin;
     si ningun-zumbador-en-la-mochila entonces inicio
      apagate;
     fin;
    mientras no-orientado-al-sur hacer inicio
     gira-izquierda;
    fin;
     mientras frente-libre hacer inicio
       avanza;
     fin;
     gira-derecha;
   fin;
  define-nueva-instruccion p(x) como inicio
    si algun-zumbador-en-la-mochila entonces inicio
      pir(x);
      si izquierda-bloqueada entonces inicio
       mientras frente-libre hacer inicio
        avanza;
       fin;
       media-vuelta;
       p(sucede(sucede(x)));
      fin;
    fin;
  fin;
    inicia-ejecucion
     mientras no-orientado-al-oeste hacer inicio
      gira-izquierda;
     fin;
      p(0);
      mientras junto-a-zumbador hacer inicio
       mientras no-orientado-al-norte hacer inicio
         gira-izquierda;
       fin;
       avanza;
       gira-derecha;
       avanza;
       gira-izquierda;
      fin;
       media-vuelta;
       avanza;
       gira-derecha;
       avanza;
        apagate;
    termina-ejecucion
finalizar-programa
