iniciar-programa
define-nueva-instruccion g(n) como
     repetir n veces gira-izquierda;
define-nueva-instruccion compara(c) como
inicio
     si (no si-es-cero(c)) y (junto-a-zumbador) entonces
      inicio
            coge-zumbador;
            compara(precede(c));
            deja-zumbador;
      fin
      sino
      inicio
            si junto-a-zumbador entonces g(2);
      fin;
fin;
define-nueva-instruccion contodo(n) como
inicio
        repetir 4 veces
        inicio
               si frente-libre entonces
               inicio
                       avanza;
                       si junto-a-zumbador entonces
                       inicio
                                     repetir 4 veces
                                     inicio
                                          si orientado-al-este entonces
                                          inicio
                                                 compara(n);
                                                 si orientado-al-oeste entonces
                                                 inicio
                                                      g(2);
                                                      mientras junto-a-zumbador hacer coge-zumbador;
                                                 fin;
                                          fin;
                                          gira-izquierda;
                                     fin;
                                     si no-junto-a-zumbador entonces
                                     inicio
                                           repetir n veces deja-zumbador;
                                           contodo(sucede(n));
                                     fin;
                       fin
                       sino
                       inicio
                             repetir n veces deja-zumbador;
                             contodo(sucede(n));
                       fin;
                       g(2);
                       avanza;
                       g(2);
               fin;
               gira-izquierda;
        fin;
fin;
define-nueva-instruccion busca como
inicio
    si derecha-libre entonces
    inicio
        g(3);
        avanza;
    fin
    sino
        si frente-libre entonces
            avanza
        sino
        inicio
            mientras frente-bloqueado hacer gira-izquierda;
            avanza;
        fin;
        coge-zumbador;
        si junto-a-zumbador o no-orientado-al-este entonces
        inicio
            deja-zumbador;
            busca;
        fin;
fin;
define-nueva-instruccion cuenta(n) como
inicio
    si frente-libre entonces
    inicio
        avanza;
        cuenta(sucede(n));
    fin
    sino
    inicio
        g(2);
        repetir n veces avanza;
        repetir n veces deja-zumbador;
    fin;
fin;
define-nueva-instruccion mini(n) como
inicio
    si frente-libre entonces
    inicio
        avanza;
        mini(sucede(n));
    fin
    sino
    inicio
        g(2);
        repetir n veces avanza;
        repetir n veces
            si junto-a-zumbador entonces coge-zumbador
        sino
        inicio
            g(2);
            repetir precede(n) veces deja-zumbador;
        fin;
        si orientado-al-norte entonces
        inicio
            mientras junto-a-zumbador hacer coge-zumbador;
            repetir n veces deja-zumbador;
        fin;
    fin;
fin;
define-nueva-instruccion termina(n) como
inicio
    si frente-libre entonces
    inicio
        avanza;
        termina(sucede(n));
    fin
    sino
    inicio
        g(2);
        repetir n veces avanza;
        repetir n veces deja-zumbador;
    fin;
fin;
define-nueva-instruccion resta(n) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        resta(sucede(n));
    fin
    sino
    inicio
        avanza;
        repetir n veces si junto-a-zumbador entonces coge-zumbador;
        apagate;
    fin;
fin;
    inicia-ejecucion
        deja-zumbador;
        contodo(2);
        mientras no-orientado-al-este hacer gira-izquierda;
        busca;
        gira-izquierda;
        cuenta(0);
        mini(0);
        mientras no-orientado-al-este hacer gira-izquierda;
        termina(0);
        avanza;
        g(2);
        resta(0);
        apagate;
    termina-ejecucion
finalizar-programa
