iniciar-programa
 Define-nueva-instruccion gira(x) como
   Repetir x veces gira-izquierda;
 Define-nueva-instruccion deja(x) como
   inicio
     Repetir x veces deja-zumbador;
     si frente-libre entonces
     avanza;
   fin;

 Define-nueva-instruccion recoge(x) como
   inicio
     Repetir x veces
         Si junto-a-zumbador  entonces
          coge-zumbador;
   fin;
 Define-nueva-instruccion dibuja(n) como inicio
   Si frente-libre  y orientado-al-oeste entonces
    inicio
       avanza;
       dibuja(sucede(n));
    fin;
   Si frente-bloqueado y orientado-al-oeste entonces
    inicio
      gira(2);
      dibuja(sucede(n));
    fin;
   Si no(si-es-cero(n)) entonces inicio
       si junto-a-zumbador y derecha-libre entonces inicio
             coge-zumbador; avanza;
             dibuja(precede(n));
             deja-zumbador;
             avanza;
       fin;
    si frente-libre y no-junto-a-zumbador y derecha-libre entonces
     inicio
          avanza;
          dibuja(precede(n));
          avanza;
     fin;
   fin
   sino
    inicio
      si derecha-libre entonces inicio
         Gira(2);
         Mientras frente-libre hacer avanza;
        girA(1);  avanza; avanza; gira(1);
        Mientras derecha-bloqueada hacer avanza;
      Gira(3);   avanza;  gira(3);
      Mientras frente-libre hacer avanza;
      Gira(2);
     fin;   fin;
 fin;
 Define-nueva-instruccion  recorre(x) como
  inicio
    Si no(si-es-cero(x))   entonces inicio
        si no-orientado-al-sur entonces
            Recoge(x);
       Si junto-a-zumbador y orientado-al-oeste entonces
         avanza
       sino
         inicio
           si orientado-al-oeste entonces inicio
            gira(1);
            avanza;
           fin;
           Si orientado-al-sur  y junto-a-zumbador  entonces
            inicio
                coge-zumbador;
                Recorre(precede(x));
            fin;
           Si orientado-al-sur y no-junto-a-zumbador entonces
            inicio
               Gira(2);
               avanza; avanza;
               deja-zumbador;
               Gira(2);
               avanza;
               Gira(3);
               si frente-libre entonces
               avanza
            fin;
        fin;
       recorre(x);
    fin
    sino
     inicio
        Gira(2);  avanza; avanza;  deja-zumbador;  Gira(1);
         mientras frente-libre hacer avanza; gira(2);
                  Repetir 6 veces avanza;  Gira(2);
                  Mientras no-junto-a-zumbador y frente-libre hacer avanza;
                  Dibuja(0);
                     deja(2);
                  apagate;
     fin;
  fin;
 Define-nueva-instruccion Reparte como inicio
    Deja(1);  Deja(2);  Deja(4);
    Deja(8);  Deja(16); Deja(32);  Deja(64);
 fin;

 Define-nueva-instruccion Convierte(n) como
   inicio
     Si junto-a-zumbador entonces
      inicio
          coge-zumbador;
          Convierte(sucede(n));
      fin
     sino
      inicio
           Reparte;
           Gira(2);
           repetir 7 veces avanza;
           gira(3);
           avanza;
           gira(3);
           Reparte;
           Gira(2);  avanza;
           Recorre(n);
      fin;
   fin;
    inicia-ejecucion
    Mientras no-orientado-al-este hacer gira-izquierda;
     si no-junto-a-zumbador entonces inicio
        Mientras derecha-bloqueada hacer avanza;
        gira(3); avanza; gira(3);
        Mientras frente-libre hacer avanza;
        gira(2);
        avanza;
        deja(2);
        apagate;
     fin;
       Convierte(0);
        apagate;
    termina-ejecucion
finalizar-programa
