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 coger(p) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                coger(sucede(p));
            fin;
        si no-junto-a-zumbador y orientado-al-norte entonces
            inicio
                repetir p veces
                    inicio
                        deja-zumbador;
                        avanza;
                    fin;
                sur;
                avanza;
                mientras junto-a-zumbador hacer avanza;
            fin;
    fin;
define-nueva-instruccion regresa como
    inicio
        sur;
        avanza;
        oeste;
        avanza;
        norte;
        avanza;
    fin;
define-nueva-instruccion ve como
    inicio
        sur;
        avanza;
        este;
        avanza;
        norte;
        avanza;
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
            fin sino apagate;
            si frente-bloqueado y junto-a-zumbador entonces
                inicio
                    regresa;
                fin sino
                    inicio
                         sur;
                           avanza;
                           oeste;
                           avanza;
                           norte;
                           avanza;
                       si junto-a-zumbador entonces
                       inicio
                           coger(0);
                       fin;

                    fin;
          si no-junto-a-zumbador y derecha-bloqueada entonces
              inicio
                  norte;
                  avanza;
                  este;
                  avanza;
                  deja-zumbador;
                  oeste;
                  avanza;
                  sur;
                  avanza;
                  este;

              fin;
    fin;
define-nueva-instruccion divide(n) como
    inicio
        si junto-a-zumbador y orientado-al-este y frente-bloqueado entonces
            inicio
                coge-zumbador;
                divide(sucede(n));
            fin;
            si no-junto-a-zumbador y orientado-al-este entonces
                inicio
                    repetir n veces deja-zumbador;
                    sur;
                fin;
            si no-junto-a-zumbador y orientado-al-norte entonces
                inicio
                    repetir n veces deja-zumbador;
                    sur;
                fin;
           si orientado-al-sur entonces
               inicio
                   mientras junto-a-zumbador hacer
                       inicio
                           coge-zumbador;
                           si junto-a-zumbador entonces
                               inicio
                                   ve;
                               fin sino
                                   inicio
                                       ve;
                                   fin;



                               fin;
                               si orientado-al-sur y frente-libre entonces
                               inicio
                                   norte;
                                   avanza;
                                   si junto-a-zumbador entonces
                                       inicio
                                           coge-zumbador;
                                           sur;
                                           divide(precede(n));
                                       fin sino
                                           inicio
                                               sur;
                                               mientras frente-libre hacer avanza;
                                               este;
                                               avanza;
                                               norte;
                                               avanza;
                                               repetir n veces deja-zumbador;
                                               apagate;
                                           fin;
                           si no-junto-a-zumbador entonces
                               inicio
                                   norte;
                                   avanza;
                                   este;
                                   avanza;
                                   deja-zumbador;
                                   oeste;
                                   avanza;
                                   sur;
                                   avanza;
                                   norte;
                               fin;
                       fin;
               fin;
        divide(n);
    fin;
define-nueva-instruccion regresa1 como
    inicio
        este;
        avanza;
        norte;
        repetir 2 veces avanza;
        oeste;
        avanza;
        norte;
    fin;
define-nueva-instruccion multiplicar (x) como
    inicio
       si junto-a-zumbador y orientado-al-sur entonces
           inicio
               coge-zumbador;
               multiplicar(sucede(x));
           fin;
           si no-junto-a-zumbador entonces
               inicio
                   norte;
                   avanza;
               fin;
           si junto-a-zumbador y orientado-al-norte entonces
               inicio
                   mientras junto-a-zumbador hacer
                       inicio
                           coge-zumbador;
                           este;
                           avanza;
                           sur;
                           repetir 2 veces avanza;
                           oeste;
                           avanza;
                           repetir x veces deja-zumbador;
                           regresa1;
                           si no-junto-a-zumbador entonces
                               inicio
                                   este;
                                   repetir 2 veces avanza;
                                   sur;
                                   avanza;
                                   este;
                                   divide(0);
                               fin;
                       fin;
               fin sino
                   inicio
                       este;
                       repetir 2 veces avanza;
                       sur;
                       avanza;
                       este;
                       divide(0);
                   fin;
    fin;
    inicia-ejecucion
        norte;
        avanza;
        este;
        avanza;
        norte;
        avanza;
        oeste;
        avanza;
        sur;
        multiplicar(0);
        apagate;
    termina-ejecucion
finalizar-programa
