iniciar-programa
define-nueva-instruccion gira(n) como
inicio
    repetir n veces gira-izquierda;
fin;


define-nueva-instruccion mitad como
inicio
    si frente-libre entonces
    inicio
        avanza;
        si frente-libre entonces
        inicio
            avanza;
            mitad;
            si orientado-al-norte o orientado-al-sur entonces
            inicio
                mientras no-orientado-al-sur hacer gira(1);
            fin
            sino
            inicio
                mientras no-orientado-al-este hacer gira(1);
            fin;
            avanza;
        fin;
    fin;
fin;

define-nueva-instruccion checa como
inicio
    mientras frente-libre hacer avanza;
    si frente-bloqueado y junto-a-zumbador entonces apagate;
    gira(2);
    mientras frente-libre hacer avanza;
    si junto-a-zumbador entonces apagate;
    gira(2);
    mientras no junto-a-zumbador hacer avanza;
    mientras no-orientado-al-sur hacer gira(1);
    mientras frente-libre hacer avanza;
    si junto-a-zumbador entonces apagate;
    gira(2);
    mientras frente-libre hacer avanza;
    si junto-a-zumbador entonces apagate;
    gira(2);
    mientras no-junto-a-zumbador hacer avanza;
    mientras no-orientado-al-este hacer gira(1);
fin;

define-nueva-instruccion zumba(z) como
inicio
    mientras no-orientado-al-este hacer gira(1);
    checa;
    repetir 4 veces
    inicio
     mientras junto-a-zumbador hacer
     inicio
         deja-zumbador;
         repetir z veces
         inicio
             si junto-a-zumbador entonces coge-zumbador;
         fin;
         si junto-a-zumbador entonces
         inicio
             coge-zumbador;
             repetir z veces deja-zumbador;
             gira(1);
             mientras junto-a-zumbador hacer avanza;
             repetir z veces deja-zumbador;
             mientras frente-libre hacer avanza;
             gira(1);
             mientras frente-libre hacer avanza;
             gira(2);
             mitad;
             zumba(sucede(z));
             apagate;
         fin
         sino
         inicio
             repetir z veces deja-zumbador;
             coge-zumbador;
             gira(1);
             avanza;
             si no-junto-a-zumbador entonces
             inicio
                 repetir z veces deja-zumbador;
             fin;
             gira(2);
             avanza;
             gira(1);
             avanza;
         fin;
     fin;
     repetir z veces
     inicio
         si junto-a-zumbador entonces coge-zumbador;
     fin;
     si junto-a-zumbador entonces
     inicio
         coge-zumbador;
         repetir z veces deja-zumbador;
     fin
     sino
     inicio
         repetir z veces deja-zumbador;
         gira(1);
         avanza;
         repetir z veces deja-zumbador;
         gira(2);
         avanza;
         gira(3);
         avanza;
         gira(1);
     fin;
    fin;

fin;


    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira(1);

    mitad;
    mientras no-orientado-al-este hacer gira(1);
    mientras frente-libre hacer avanza;
    gira(2);
    mitad;
    deja-zumbador;


    zumba(2);

        apagate;
    termina-ejecucion
finalizar-programa
