iniciar-programa
define-nueva-instruccion arriba como
 inicio
    mientras no-orientado-al-norte hacer
      gira-izquierda;
    mientras frente-libre hacer
       avanza;
    mientras no-orientado-al-oeste hacer
       gira-izquierda;
    mientras frente-libre hacer
       avanza;
    gira-izquierda;
    gira-izquierda;
 fin;

 define-nueva-instruccion ll como
 inicio
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       si junto-a-zumbador entonces
       inicio
          coge-zumbador;
          ll;
          deja-zumbador;
          deja-zumbador;
       fin
       sino
          avanza;
    fin
    sino
       avanza;
 fin;
 define-nueva-instruccion cuenta(n) como
 inicio
    si junto-a-zumbador y no si-es-cero(n) entonces
    inicio
       coge-zumbador;
       cuenta(precede(n));
       deja-zumbador;
    fin
    sino
       si no si-es-cero(n) entonces
          gira-izquierda;
 fin;
 define-nueva-instruccion sube(n) como
 inicio
    si orientado-al-norte entonces
    inicio
        si frente-libre entonces
        inicio
           avanza;
           sube(n);
           avanza;
        fin
        sino
        inicio
           gira-izquierda;
           sube(n);
           repetir 3 veces
              gira-izquierda;
        fin;
    fin
    sino
    inicio
       si frente-libre entonces
       inicio
           avanza;
           sube(n);
           avanza;
       fin
       sino
       inicio
          cuenta(n);
          si orientado-al-sur entonces
          inicio
             mientras junto-a-zumbador hacer
                coge-zumbador;
             repetir n veces
                deja-zumbador;
          gira-izquierda;
          fin
          sino
          repetir 2 veces
          gira-izquierda;

       fin;
    fin;
 fin;
 define-nueva-instruccion compara(n) como
 inicio
    repetir 4 veces
    inicio
       si orientado-al-norte  entonces
       inicio
          sube(n);
          gira-izquierda;
          gira-izquierda;
       fin;
       gira-izquierda;
    fin;
 fin;

define-nueva-instruccion paridad(n) como
 inicio
    si junto-a-zumbador entonces
    inicio
       coge-zumbador;
       si junto-a-zumbador entonces
       inicio
          coge-zumbador;
          paridad(sucede(n));
       fin
       sino
       compara(n);
    fin
    sino
       compara(n);
 fin;

 define-nueva-instruccion dfs(n) como
 inicio
    mientras junto-a-zumbador hacer
       coge-zumbador;
    repetir 3 veces
       gira-izquierda;
    repetir 3 veces
    inicio
       si frente-libre entonces
       inicio
          avanza;
          si junto-a-zumbador entonces
          inicio
             si (orientado-al-norte y frente-bloqueado y izquierda-bloqueada) o
                (orientado-al-oeste y frente-bloqueado y derecha-bloqueada) entonces
               inicio
               fin
               sino
               inicio
                 coge-zumbador;
                 si junto-a-zumbador entonces
                 inicio
                    deja-zumbador;
                    dfs(2);
                 fin
                 sino
                 inicio
                    deja-zumbador;
                    dfs(1);
                 fin;
               fin;
          fin;
          gira-izquierda;
          gira-izquierda;
          avanza;
          gira-izquierda;
          gira-izquierda;
       fin;
    gira-izquierda;
    fin;
    si frente-libre y no si-es-cero(n) entonces
    inicio
       si si-es-cero(precede(n)) entonces
          deja-zumbador
       sino
          repetir 2 veces
             deja-zumbador;
       ll;
       gira-izquierda;
       gira-izquierda;
       avanza;
    fin
    sino
    inicio
    gira-izquierda;
    gira-izquierda;
    fin;
 fin;
 define-nueva-instruccion regresa como
 inicio
    gira-izquierda;
    gira-izquierda;
    mientras frente-libre hacer
       avanza;
    gira-izquierda;
    avanza;
    gira-izquierda;
 fin;

 define-nueva-instruccion recorre como
 inicio
    avanza;
    mientras (frente-libre o derecha-libre) hacer
    inicio
       mientras (frente-libre) y no-junto-a-zumbador hacer
          avanza;
       si junto-a-zumbador entonces
       inicio
          coge-zumbador;
          si junto-a-zumbador entonces
          inicio
              dfs(0);
              repetir 2 veces
                 deja-zumbador;

          fin
          sino
          inicio
              dfs(0);
              deja-zumbador;
          fin;
          paridad(0);
       fin
       sino
         si derecha-libre entonces
          regresa;
    fin;
 fin;
 define-nueva-instruccion lleva como
 inicio
 si junto-a-zumbador entonces
 inicio
    coge-zumbador;
    lleva;
    deja-zumbador;
 fin
 sino
 inicio
    mientras frente-libre hacer
      avanza;
 fin;
 fin;

    inicia-ejecucion
      arriba;
      si junto-a-zumbador entonces
      inicio
         coge-zumbador;
         si junto-a-zumbador entonces
         inicio
            dfs(0);
            deja-zumbador;
            deja-zumbador;
         fin
         sino
         inicio
            deja-zumbador;
            dfs(0);
         fin;
         paridad(0);
      fin;
      recorre;
      arriba;
      repetir 3 veces
         gira-izquierda;
      lleva;
        apagate;
    termina-ejecucion
finalizar-programa
