iniciar-programa
define-nueva-instruccion gira(N) como repetir n veces gira-izquierda;
define-nueva-instruccion clona2 como
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    clona2;
    deja-zumbador;
fin
sino
inicio
    si frente-libre entonces avanza;
    mientras junto-a-zumbador y frente-libre hacer avanza;
    si no junto-a-zumbador entonces
    inicio
        gira(2);
        avanza;
        gira(2);
    fin;
    gira(3);
    avanza;
fin;
define-nueva-instruccion todo-izquierda como
inicio
    mientras no-orientado-al-sur hacer gira(1);
    mientras frente-libre hacer avanza;
    gira(2);
    avanza;
    gira(3);
    mientras frente-libre hacer avanza;
    gira(3);
    avanza;
    gira(1);
    avanza;
    deja-zumbador;
fin;
define-nueva-instruccion cuenta-todo-derecha como
si frente-libre entonces
inicio
    avanza;
    cuenta-todo-derecha;
    deja-zumbador;
fin
sino
inicio
   gira(2);
   si frente-bloqueado entonces
   inicio
       gira(1);
       avanza;
       gira(1);
       avanza;
   fin
   sino
   inicio
       gira(1);
       avanza;
       gira(1);
       avanza;
       deja-zumbador;
   fin;
fin;
define-nueva-instruccion todo-derecha como
inicio
    mientras no-orientado-al-sur hacer gira(1);
    mientras frente-libre hacer avanza;
    gira(2);
    avanza;
    gira(1);
    mientras frente-libre hacer avanza;
    gira(2);
    cuenta-todo-derecha;
fin;
define-nueva-instruccion clona como
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    clona;
    deja-zumbador;
    gira(2);
    avanza;
    deja-zumbador;
    gira(2);
    avanza;
fin
sino
inicio
   gira(2);
   avanza;
fin;
define-nueva-instruccion cuentaizquierda como
si frente-libre entonces
inicio
    avanza;
    cuentaizquierda;
    deja-zumbador;
fin
sino
inicio
    gira(1);
    avanza;
    gira(1);
    mientras no-junto-a-zumbador y frente-libre hacer avanza;
    gira(2);
    si frente-libre entonces avanza;
    gira(3);
    avanza;
fin;
define-nueva-instruccion cuentaderecha como
si frente-libre entonces
inicio
    avanza;
    cuentaderecha;
    deja-zumbador;
fin
sino
inicio
    gira(3);
    avanza;
    gira(3);
    mientras no-junto-a-zumbador y frente-libre hacer avanza;
    gira(2);
    si frente-libre entonces avanza;
    gira(1);
    avanza;
fin;
define-nueva-instruccion portero como
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    portero;
    si frente-libre entonces avanza;
fin
sino
inicio
    mientras frente-libre hacer avaNZA;
    gira(2);
fin;
define-nueva-instruccion alto como
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    alto;
    deja-zumbador;
    si frente-libre entonces avanza;
fin
sino
inicio
    avanza;
    portero;
    gira(2);
    avanza;
    gira(3);
fin;
define-nueva-instruccion ancho como
si junto-a-zumbador entonces
inicio
    coge-zumbador;
    ancho;
    gira(3);
    mientras frente-libre hacer
    inicio
        si no junto-a-zumbador entonces deja-zumbador;
        avanza;
    fin;
    si no-junto-a-zumbador entonces deja-zumbador;
    gira(2);
    mientras junto-a-zumbador y frente-libre hacer avanza;
    si junto-a-zumbador entonces
    inicio
        gira(3);
        si frente-libre entonces avanza;
    fin
    sino
    inicio
        gira(2);
        avanza;
        gira(1);
        si frente-libre entonces avanza;
    fin;
fin
sino
inicio
    avanza;
    alto;
    si junto-a-zumbador entonces
    inicio
        gira(3);
    fin
    sino
    inicio
        gira(2);
        avanza;
        gira(1);
    fin;
fin;
define-nueva-instruccion lejano como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        avanza;
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            gira(2);
            avanza;
            gira(2);
            lejano;
        fin
        sino todo-izquierda;
    fin 
    sino todo-derecha;
fin;
define-nueva-instruccion compara como
inicio
    si junto-a-zumbador entonces
    inicio
        mientras junto-a-zumbador y frente-libre hacer avanza;
        si no-junto-a-zumbador entonces
        inicio
            gira(2);
            avanza;
        fin
        sino gira(2);
        si junto-a-zumbador entonces
        inicio
            clona2;
            gira(2);
            lejano;
        fin;
    fin;
fin;
    inicia-ejecucion
    gira(3);
    repetir 3 veces avanza;
    gira(2);
    ancho;
    si junto-a-zumbador entonces gira(3) sino
    inicio
        gira(2);
        avanza;
        gira(1);
    fin;
    mientras frente-libre hacer avanza;
    gira(2);
    avanza;
    gira(3);
    cuentaderecha;
    gira(2);
    AVANZA;
    gira(3);
    avanza;
    mientras junto-a-zumbador y frente-libre hacer avanza;
    si no junto-a-zumbador entonces
    inicio
        gira(2);
        avanza;
        gira(2);
    fin;
    gira(3);
    avanza;
    gira(1);
    cuentaizquierda;
    gira(2);
    avanza;
    si junto-a-zumbador entonces
    inicio
        gira(1);
        todo-derecha;
    fin
    sino
    inicio
        gira(2);
        avanza;
        clona;
        gira(1);
        mientras junto-a-zumbador y frente-libre hacer avanza;
        si no-junto-a-zumbador entonces
        inicio
            gira(2);
            avanza;
            gira(3);
            avanza;
            gira(3);
            si frente-bloqueado entonces todo-izquierda sino
            inicio
                si frente-libre entonces avanza;
                gira(2);
                compara;
            fin;
        fin
     fin;

        apagate;
    termina-ejecucion
finalizar-programa
