iniciar-programa
define-nueva-instruccion g(s) como repetir s veces gira-izquierda;
define-nueva-instruccion cuentaunos(d) como inicio
   si junto-a-zumbador y frente-libre entonces inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces inicio
            deja-zumbador;
           si derecha-libre y no(orientado-al-oeste) entonces g(3);
           avanza;
           si derecha-libre y orientado-al-oeste entonces inicio
        g(1);
        avanza;
        g(1);
        avanza;
        g(3);
        repetir d veces deja-zumbador;
        deja-zumbador;
        deja-zumbador;
        sal-de-instruccion;
      fin;
           cuentaunos(sucede(d));
      fin;
      si junto-a-zumbador y frente-libre entonces inicio
      deja-zumbador;
      si derecha-libre y no (orientado-al-oeste) entonces g(3);
      avanza;
      si derecha-libre y orientado-al-oeste entonces inicio
        g(1);
        avanza;
        g(1);
        avanza;
        g(3);
        repetir d veces deja-zumbador;
        deja-zumbador;
      fin;
     si frente-libre entonces cuentaunos(d);
      fin;
   fin;
fin;
define-nueva-instruccion cuentados(d) como inicio
   si junto-a-zumbador entonces inicio
      coge-zumbador;
      si no-junto-a-zumbador entonces inicio
           si derecha-libre entonces g(3);
           avanza;
           cuentados(d);
      fin;
      si junto-a-zumbador y frente-libre entonces inicio
      coge-zumbador;
      si derecha-libre y no (orientado-al-oeste) entonces g(3); 
      avanza;
      si derecha-libre y orientado-al-oeste entonces inicio
      mientras junto-a-zumbador hacer coge-zumbador;
        g(1);
        avanza;
        g(1);
        repetir 2 veces avanza;
        g(3);
        repetir d veces deja-zumbador;
        deja-zumbador;
      fin;
     si frente-libre entonces cuentados(sucede(d));
      fin;
   fin;
    si derecha-libre y orientado-al-oeste entonces inicio
      mientras junto-a-zumbador hacer coge-zumbador;
        g(1);
        avanza;
        g(1);
        repetir 2 veces avanza;
        g(3);
        repetir d veces deja-zumbador;
      fin;
fin;
 define-nueva-instruccion barda(x) como inicio
 si junto-a-zumbador entonces inicio
 coge-zumbador;
 barda(sucede(x));
 fin;
 si no-junto-a-zumbador entonces inicio
    repetir x veces deja-zumbador;
    g(1);
    avanza;
    deja-zumbador;
    mientras frente-libre hacer inicio
      repetir x veces inicio
       si junto-a-zumbador entonces avanza;
        si derecha-libre y no (orientado-al-oeste) entonces g(3);
        si junto-a-zumbador entonces inicio
        mientras no-orientado-al-norte hacer g(1);
         coge-zumbador;
        avanza;
        cuentaunos(0);
        g(2);
        avanza;
        g(1);
        avanza;
        g(3);
        avanza;
        cuentados(0);
        apagate;
        fin;
        repetir 2 veces deja-zumbador;
      fin;
      mientras junto-a-zumbador hacer coge-zumbador;
      deja-zumbador;
      si derecha-libre entonces inicio
      g(3);
      avanza;
      si junto-a-zumbador entonces inicio
        g(2);
        avanza;
        g(3);
        avanza;
      fin;
      fin;
      si derecha-libre entonces g(3);
    fin;
 fin;
 fin;
    inicia-ejecucion
       mientras no-orientado-al-este hacer gira-izquierda;
       avanza;
       barda(0);
        apagate;
    termina-ejecucion
finalizar-programa
