iniciar-programa
define-nueva-instruccion g(n) como
  inicio
   repetir n veces gira-izquierda;
  fin;
  define-nueva-instruccion checa como
   inicio
    si frente-libre entonces avanza;
    g(3);
    si frente-libre entonces avanza;
    g(1);
   fin;
  define-nueva-instruccion llega como
    inicio
     mientras frente-libre o frente-bloqueado hacer
       inicio
         si junto-a-zumbador entonces
           inicio
             coge-zumbador;
               si junto-a-zumbador entonces
                  inicio
                   deja-zumbador;
                   checa;
                    si junto-a-zumbador entonces
                      inicio
                        g(2);
                        checa;
                        g(2);

                      fin
                   sino
                    inicio
                     g(2);
                     checa;
                     apagate;
                   fin;
                   sal-de-instruccion;
                  fin
               sino
                inicio
                  deja-zumbador;
                  checa;

                fin;
           fin;
       fin;
     fin;
     define-nueva-instruccion regresa como
       inicio
        mientras frente-libre o frente-bloqueado hacer
          inicio
            si junto-a-zumbador entonces
               inicio
                 coge-zumbador;
                  si junto-a-zumbador entonces
                    inicio
                      deja-zumbador;
                      sal-de-instruccion;
                    fin
                  sino
                   inicio
                    deja-zumbador;
                    checa;
                    fin;
               fin;
          fin;
     fin;
  define-nueva-instruccion rama como
    inicio
       si frente-libre entonces
          avanza;
          g(3);
          si frente-libre entonces avanza;
          si junto-a-zumbador entonces
           inicio
             g(2);
             si frente-libre entonces avanza;
             g(1);
             si frente-libre entonces avanza;
            g(2);
           fin
          sino
            inicio
             g(2);
             si frente-libre entonces avanza;
             g(1);
             si frente-libre entonces avanza;
             g(3);
            fin;

    fin;

  define-nueva-instruccion bfs(n) como
   inicio
     repetir 2 veces
      inicio
        checa;
        llega;

       si no si-es-cero (n) entonces
        inicio
        si orientado-al-oeste entonces g(3);
         bfs(precede(n));
         rama;
         checa;
         regresa;
         g(3);
        fin
        sino
          inicio
             g(2);
            checa;
            regresa;
            g(3);

          fin;

     fin;

  fin;
 define-nueva-instruccion dis(n) como
   inicio
    si frente-libre o frente-bloqueado entonces
     inicio
        bfs(n);
        g(2);
        dis(sucede(n));
      fin;

   fin;
    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira-izquierda;
    checa;
    si no-junto-a-zumbador entonces
     inicio
       g(2);
       checa;
    fin
     sino                  
       inicio
        g(2);
        checa;
        g(2);
        dis(0);
      fin;
        apagate;
    termina-ejecucion
finalizar-programa
