iniciar-programa
define-nueva-instruccion g(n) como
  inicio
    repetir n veces gira-izquierda;
  fin;
 define-nueva-instruccion lleva(n) como
   inicio
    g(2);
    si frente-libre entonces avanza;
    repetir n veces deja-zumbador;
    g(2);
    si frente-libre entonces avanza;
   fin;

  define-nueva-instruccion trae como
     inicio
       si junto-a-zumbador entonces
         inicio
            coge-zumbador;
            trae;
            deja-zumbador;
         fin
       sino
        inicio
          g(2);
          si frente-libre entonces avanza;
       fin;

     fin;
define-nueva-instruccion bfs(n) como
  inicio
    g(3);
    repetir 3 veces
      inicio
        si frente-libre entonces
          inicio
             avanza;
               si junto-a-zumbador entonces
                 inicio
                   coge-zumbador;
                     si junto-a-zumbador entonces
                       inicio
                         coge-zumbador;
                           si junto-a-zumbador entonces
                              inicio
                                coge-zumbador;
                                g(2);
                                si frente-libre entonces avanza;
                                trae;
                                mientras no-orientado-al-oeste hacer gira-izquierda;
                                 trae;
                                 coge-zumbador;
                                 apagate;
                               fin
                         sino
                          inicio
                          si no si-es-cero (n) entonces
                            inicio
                             g(2);
                             si frente-libre entonces avanza;
                             trae;
                             coge-zumbador;
                             bfs(precede(n));
                             trae;
                             deja-zumbador;
                             lleva(2);
                             g(2);
                            fin
                         sino
                           inicio
                            repetir 2 veces deja-zumbador;
                            g(2);
                            si frente-libre entonces avanza;
                            g(2);

                          fin;
                         fin;
                       fin
                 sino
                  inicio
                     g(2);
                     si frente-libre entonces avanza;
                     trae;
                     bfs(n);
                     trae;
                     lleva(1);
                     g(2);
                   fin;

              fin
             sino
               inicio
                g(2);
                si frente-libre entonces avanza;
                g(2);
               fin;
            fin;
          g(1);
       fin;
       g(2);
  fin;

define-nueva-instruccion dis(n) como
  inicio
    si frente-libre entonces avanza;
    g(2);
    coge-zumbador;
        si no-junto-a-zumbador entonces
          inicio
            si frente-libre entonces avanza;
            trae;
            bfs(n);
            trae;
            g(2);
            si frente-libre entonces avanza;
            deja-zumbador;
            g(2);
            si frente-libre entonces avanza;
            g(2);
            dis(sucede(n));
          fin
        sino
         inicio
           coge-zumbador;
           si frente-libre entonces avanza;
           trae;
           coge-zumbador;
           bfs(n);
           trae;
           deja-zumbador;
           g(2);
           si frente-libre entonces avanza;
           repetir 2 veces deja-zumbador;
           g(2);
           si frente-libre entonces avanza;
           g(2);
           dis(sucede(n));
          fin;

  fin;
inicia-ejecucion
  dis(0);

        apagate;
    termina-ejecucion
finalizar-programa
