iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion regresa como repetir 2 veces gira-izquierda;
define-nueva-instruccion derecha como repetir 3 veces gira-izquierda;
define-nueva-instruccion buscar (x) como
    inicio
        mientras orientado-al-norte y frente-libre hacer avanza;
        si frente-bloqueado entonces oeste;
        si derecha-bloqueada y frente-libre entonces
            inicio
                 avanza;
                 buscar (sucede(x))

            fin sino
                inicio
                    si derecha-libre entonces
                        inicio
                            derecha;
                            mientras frente-libre hacer
                                inicio
                                    avanza;
                                    mientras derecha-bloqueada y frente-libre hacer avanza;
                                    derecha;
                                fin;
                        fin;
                fin;
        si frente-bloqueado y derecha-bloqueada entonces
           inicio
               regresa;
               repetir x veces avanza;
               sur;
               mientras frente-libre hacer avanza;
               este;
               si frente-libre entonces avanza;
               norte;
           fin;
    fin;
define-nueva-instruccion irzumb como
    inicio
        sur;
        mientras derecha-bloqueada hacer avanza;
        si derecha-libre entonces
            inicio
                derecha;
                mientras frente-libre hacer avanza;
                sur;
                mientras frente-libre hacer avanza;
                este;
                mientras no-junto-a-zumbador hacer avanza;
            fin;
    fin;
define-nueva-instruccion contar(v) como
    inicio
       si frente-libre entonces
           inicio
               avanza;
               contar(sucede(sucede(v)))
           fin sino
               inicio
                   irzumb;
                   si junto-a-zumbador entonces repetir v veces coge-zumbador;
                   repetir 2 veces coge-zumbador;
                   oeste;
                    mientras frente-libre hacer avanza;
                    norte;
                    avanza;
                   mientras algun-zumbador-en-la-mochila hacer
                       inicio
                          deja-zumbador;
                           avanza;
                       fin;
                   sur;
                   mientras frente-libre hacer avanza;
                   oeste;
               fin;
    fin;
define-nueva-instruccion contar2 (z) como
    inicio
       si frente-libre entonces
           inicio
               avanza;
               contar2(sucede(sucede(sucede(z))))
           fin sino
               inicio
                   irzumb;
                   si junto-a-zumbador entonces repetir z veces coge-zumbador;
                   repetir 3 veces coge-zumbador;
                   norte;
                   avanza;
                   oeste;
                   mientras frente-libre hacer avanza;
                   norte;
                   mientras algun-zumbador-en-la-mochila y frente-libre hacer
                       inicio
                           deja-zumbador;
                           avanza;
                       fin;
                   si frente-bloqueado y algun-zumbador-en-la-mochila entonces
                       inicio
                           deja-zumbador;
                       fin;
               fin;
    fin;

define-nueva-instruccion comparar como
    inicio
        sur;
        si no-junto-a-zumbador entonces avanza;
        mientras junto-a-zumbador hacer
            inicio
                coge-zumbador;
                avanza;
            fin;
        mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
    fin;
    define-nueva-instruccion comprar como
        inicio
             norte;
            mientras orientado-al-norte y frente-libre hacer
            buscar(0);
            norte;
            avanza;
            oeste;
            contar(0);
            mientras frente-libre hacer avanza;
            norte;
            repetir 5 veces avanza;
            este;
            mientras frente-libre hacer avanza;
            norte;
            repetir 2 veces avanza;
            oeste;
            contar2(0);
            comparar;
        fin;
    inicia-ejecucion
        comprar;
        apagate;
    termina-ejecucion
finalizar-programa
