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 IrCuadro como
    inicio
        mientras derecha-bloqueada hacer avanza;
        este;
        avanzA;
        mientras derecha-bloqueada hacer avanza;
        sur;
        avanza;
        oeste;
        mientras frente-libre hacer avanza;
        sur;
        mientras frente-libre hacer avanza;
        norte;
    fin;
define-nueva-instruccion contar(n) como
    inicio
       si no-orientado-al-norte entonces
           inicio
               si frente-libre entonces
                   inicio
                      si junto-a-zumbador entonces
                          inicio
                              avanza;
                              contar(1);
                          fin sino
                              inicio
                                  avanza;
                                  contar(0);
                              fin;
                   fin sino
                       inicio
                           si junto-a-zumbador entonces
                               inicio
                                  norte;
                                  mientras frente-libre hacer avanza;
                                  oeste;
                                  si frente-libre entonces
                                      inicio
                                          avanza;
                                          sur;
                                          contar(1);
                                      fin sino
                                          inicio
                                              norte;
                                              contar(1);
                                          fin;
                               fin sino
                                   inicio
                                       nortE;
                                       mientras frente-libre hacer avanza;
                                       oeste;
                                       si frente-libre entonces
                                           inicio
                                               avanza;
                                               sur;
                                               contaR(0);
                                           fin sino
                                               inicio
                                                   norte;
                                                   contar(0);
                                               fin;
                                   fin;
                       fin;
           fin sino
               inicio
                   este;
                   mientras frente-libre hacer avanza;
                   norte;
                   irCuadro;
               fin;
          si frente-bloqueado entonces
              inicio
                  sur;
                  mientras frente-libre hacer avanza;
                  este;
                  avanza;
                  si frente-libre entonces
                      inicio
                          avanza;
                          norte;
                      fin sino apagate;
              fin;
          si si-es-cero(precede(n)) entonces
              inicio
                 repetir 2 veces
                     inicio
                         deja-zumbador;
                         este;
                         avanza;
                         deja-zumbador;
                         oeste;
                         avanza;
                         norte;
                         si frente-libre entonces avanza;
                     fin;
                 norte;
              fin;
         si si-es-cero(n) entonces
              inicio
                 repetir 2 veces si frente-libre entonces avanza;
                 norte;
              fin;
    fin;
    inicia-ejecucion
        sur;
        contar(0);
        apagate;
    termina-ejecucion
finalizar-programa
