iniciar-programa
define-nueva-instruccion aaa como si frente-libre entonces avanza;
define-nueva-instruccion g(a) como repetir a veces gira-izquierda;
 define-nueva-instruccion pinta(k) como inicio
 si si-es-cero (k) entonces inicio
   si junto-a-zumbador entonces inicio
       coge-zumbador;
      si no-junto-a-zumbador entonces inicio
        deja-zumbador;
        mientras no-orientado-al-norte hacer gira-izquierda;
        aaa;
        si junto-a-zumbador entonces coge-zumbador;
        sal-de-instruccion;
      fin;
       si junto-a-zumbador entonces inicio
        coge-zumbador;
      si no-junto-a-zumbador entonces inicio
        deja-zumbador;
        mientras no-orientado-al-sur hacer gira-izquierda;
        aaa;
        si junto-a-zumbador entonces coge-zumbador;
        sal-de-instruccion;
      fin;
       si junto-a-zumbador entonces inicio
        coge-zumbador;
      si no-junto-a-zumbador entonces inicio
         deja-zumbador;
         mientras no-orientado-al-este hacer gira-izquierda;
         aaa;
         si junto-a-zumbador entonces coge-zumbador;
         sal-de-instruccion;
      fin;
   fin;
   fin;
   fin;
 fin;
 deja-zumbador;
 fin;
 define-nueva-instruccion cuenta2(k) como inicio
   si junto-a-zumbador entonces inicio
     coge-zumbador;
     cuenta2(sucede(k));
   fin;
   si no-junto-a-zumbador y frente-libre y orientado-al-oeste entonces inicio
   aaa;
   si frente-libre entonces cuenta2(0);
    fin;
     si frente-bloqueado  y orientado-al-oeste entonces inicio
     g(2);
     aaa;
      fin;
     pinta(k);
 fin;
 define-nueva-instruccion cuenta4(b) como inicio
   si junto-a-zumbador entonces inicio
     avanza;
     cuenta4(sucede(b));
   fin;
   si no-junto-a-zumbador  entonces inicio
      g(2);
      mientras frente-libre hacer avanza;
      g(3);
      aaa;
      si frente-bloqueado entonces inicio
       repetir b veces deja-zumbador;
       apagate;
      fin;
      g(3);
      cuenta4(b);
   fin;
 fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer gira-izquierda;
     aaa;
     mientras junto-a-zumbador y frente-libre hacer avanza;
     si no-junto-a-zumbador entonces inicio
       g(2);
       aaa;
       g(2);
     fin;
     g(2);
     cuenta2(0);
    si no-junto-a-zumbador entonces deja-zumbador;
      si frente-libre entonces inicio
       mientras no-orientado-al-sur hacer gira-izquierda;
       mientras frente-libre hacer avanza;
      fin;
       si frente-bloqueado entonces inicio
      g(3);
      avanza;
      g(3);
      fin;
      mientras izquierda-libre hacer inicio
        si no-junto-a-zumbador entonces inicio
        deja-zumbador;
        avanza;
        fin;
        si junto-a-zumbador entonces inicio
          g(2);
          mientras frente-libre hacer avanza;
          g(3);
          avanza;
          g(3);
        fin;
      fin;
        mientras no-orientado-al-oeste hacer gira-izquierda;
        mientras frente-libre hacer avanza;
        g(1);
        mientras frente-libre hacer avanza;
        g(1);
         avanza;
         mientras junto-a-zumbador y frente-libre hacer avanza;
         si no-junto-a-zumbador entonces inicio
           g(2);
           avanza;
           g(2);
         fin;
         g(1);
         cuenta4(0);
        apagate;
    termina-ejecucion
finalizar-programa
