iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;

define-nueva-instruccion ir1-1 como
    inicio
        sur;
        mientras frente-libre hacer avanza;
        oeste;
        mientras frente-libre hacer avanza;
        norte;
    fin;

define-nueva-instruccion ir1 como
    inicio
        norte;
        repetir 4 veces avanza;
        este;
        avanza;
        avanza;
        avanza;
    fin;

define-nueva-instruccion ir como
    inicio
        norte;
        avanza;
        este;
        avanza;
        avanza;
        avanza;
    fin;
define-nueva-instruccion cuenta(x) como
    inicio
        si izquierda-bloqueada entonces
            inicio
                avanza;
                cuenta(sucede(sucede(x)));
            fin;
        si izquierda-libre y orientado-al-este entonces
            inicio
                sur;
                mientras frente-libre hacer avanza;
                oeste;
                mientras no-junto-a-zumbador hacer avanza;
                si junto-a-zumbador entonces repetir x veces coge-zumbador;
                repetir 3 veces avanza;
                norte;
                repetir x veces
                    inicio
                        deja-zumbador;
                        avanza;
                    fin;

            fin;
    fin;
define-nueva-instruccion cuenta1(b) como
    inicio
        si izquierda-bloqueada entonces
            inicio
                avanza;
                cuenta1(sucede(sucede(sucede(b))));
            fin;
        si izquierda-libre y orientado-al-este entonces
            inicio
                mientras derecha-bloqueada hacer avanza;
                sur;
                mientras frente-libre hacer avanza;
                oeste;
                mientras no-junto-a-zumbador hacer avanza;
                si junto-a-zumbador entonces repetir b veces coge-zumbador;
                avanza;
                avanza;
                norte;
                repetir b veces
                inicio
                    deja-zumbador;
                    avanza;
                fin;

            fin;
    fin;
define-nueva-instruccion verificar como
    inicio
        este;
        avanza;
        norte;
        si junto-a-zumbador entonces
            inicio
                mientras junto-a-zumbador hacer avanza;
            fin;
        si no-junto-a-zumbador entonces
            inicio
                este;
                avanza;
                si junto-a-zumbador entonces
                    inicio
                        norte;
                        mientras junto-a-zumbador hacer avanza;
                        sur;
                        avanza;
                        mientras junto-a-zumbador hacer
                            inicio
                                coge-zumbador;
                                si frente-libre entonces avanza;
                                si frente-bloqueado y no-junto-a-zumbador entonces
                                    inicio
                                        oeste;
                                        mientras frente-libre hacer avanza;
                                        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                        apagate;
                                    fin;
                            fin;
                    fin
                sino 
                    inicio
                        oeste;
                        avanza;
                        sur;
                        avanza;
                        mientras junto-a-zumbador hacer
                            inicio
                                coge-zumbador;
                                si frente-libre entonces avanza;
                                si frente-bloqueado y no-junto-a-zumbador entonces
                                    inicio
                                        oeste;
                                        avanza;
                                        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                        apagate;

                                    fin;
                            fin;
                    fin;
            fin;
    fin;

   inicia-ejecucion
        ir;
        cuenta(0);
        ir1-1;
        ir1;
        cuenta1(0);
        ir1-1;
        verificar;
        apagate;
    termina-ejecucion
finalizar-programa
