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 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 baja como
        inicio
           sur;
           si frente-libre y orientado-al-sur entonces
               inicio
                  avanza;
                  oeste;
                  mientras frente-libre hacer avanza;
                  este;
               fin;
          si frente-bloqueado y orientado-al-sur entonces
              inicio
                 oeste;
                 mientras frente-libre hacer avanza;
                 este;
                 si derecha-libre y frente-libre entonces
                   inicio
                      sur;
                      avanza;
                      oeste;
                      mientras frente-libre hacer avanza;
                      este;
                   fin;
                 mientras derecha-bloqueada y frente-libre hacer
                     inicio
                        avanza;
                        si derecha-libre entonces
                            inicio
                               sur;
                               avanza;
                               este;
                            fin;
                       si frente-bloqueado y orientado-al-este entonces
                           inicio
                              oeste;
                              mientras izquierda-bloqueada y frente-libre hacer
                                  inicio
                                     avanza;
                                     si izquierda-libre entonces
                                         inicio
                                            mientras frente-libre hacer avanza;
                                            este;
                                         fin;
                                     si frente-bloqueado y izquierda-bloqueada entonces apagate;
                                  fin;
                           fin;
                     fin;
               si frente-bloqueado y junto-a-zumbador entonces apagate;

              fin;
        fin;

    define-nueva-instruccion E-m(G) como
        inicio
             si frente-libre entonces
                inicio
                   repetir 2 veces avanza;
                   E-m(sucede(G));
                fin sino
                    inicio
                       oeste;
                       repetir g veces avanza;
                       si no-junto-a-zumbador entonces deja-zumbador;
                       baja;

                    fin;

        fin;

    inicia-ejecucion
            inicio
               oeste;
               mientras frente-libre hacer avanza;
               este;
            fin;
        mientras frente-libre o frente-bloqueado hacer E-m(0);

        apagate;
    termina-ejecucion
finalizar-programa
