iniciar-programa
define-nueva-instruccion norte como
inicio
mientras no-orientado-al-norte hacer gira-izquierda;
fin;
define-nueva-instruccion sur como
inicio
mientras no-orientado-al-sur hacer gira-izquierda;
fin;
define-nueva-instruccion este como
inicio
mientras no-orientado-al-este hacer gira-izquierda;
fin;
define-nueva-instruccion oeste como
inicio
mientras no-orientado-al-oeste hacer gira-izquierda;
fin;
define-nueva-instruccion cuenta(num) como
inicio

si junto-a-zumbador entonces
    inicio
    coge-zumbador;
    si junto-a-zumbador entonces
        inicio
        coge-zumbador;
        si junto-a-zumbador entonces
            inicio
            coge-zumbador;
            si junto-a-zumbador entonces
                inicio
                coge-zumbador;
                si junto-a-zumbador entonces
                    inicio
                    coge-zumbador;
                    si junto-a-zumbador entonces
                        inicio
                        coge-zumbador;
                        si junto-a-zumbador entonces
                            inicio
                            coge-zumbador;
                            si junto-a-zumbador entonces
                                inicio
                                coge-zumbador;
                                si junto-a-zumbador entonces
                                    inicio
                                    coge-zumbador;
                                    si junto-a-zumbador entonces
                                        inicio
                                        coge-zumbador;
                                        oeste; si frente-libre entonces avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
                                        deja-zumbador;
                                        norte; avanza; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                        sur; avanza; este;
                                        avanza; oeste; cuenta(0);
                                        fin
                                        sino
                                        inicio
                                        oeste; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                        si frente-libre entonces  avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
                                        cuenta(0);
                                        fin;
                                    fin
                                    sino
                                    inicio
                                    oeste; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                    si frente-libre entonces  avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
                                    cuenta(0);
                                    fin;
                                fin
                                sino
                                inicio
                                oeste; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                                si frente-libre entonces avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
                                cuenta(0);
                                fin;

                            fin
                            sino
                            inicio
                            oeste; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                            si frente-libre entonces avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
                            cuenta(0);
                            fin;

                            fin
                        sino
                        inicio
                        oeste; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                        si frente-libre entonces avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
                        cuenta(0);
                        fin;

                    fin
                    sino
                    inicio
                    oeste; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                    si frente-libre entonces avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
                    cuenta(0);
                    fin;

                fin
                sino
                inicio
                oeste;  mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                si frente-libre entonces avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
                cuenta(0);
                fin;

            fin
            sino
            inicio
            oeste; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
            si frente-libre entonces avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
            cuenta(0);
            fin;

        fin
        sino
        inicio
        oeste; mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
        si frente-libre entonces avanza sino INICIO MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR; apagate; FIN;
        cuenta(0);
        fin;

    fin
    sino
    SI FRENTE-LIBRE ENTONCES INICIO AVANZA; CUENTA(0); FIN
    SINO
    INICIO
    MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR;
    apagate;
    FIN;
    fin;
                                               
define-nueva-instruccion junta como
inicio
mientras junto-a-zumbador hacer coge-zumbador; si frente-libre entonces avanza
sino
inicio
este;
si frente-libre entonces
    inicio
    avanza; norte; avanza; oeste; avanza; norte;
    fin
    sino
    inicio
    oeste; si frente-libre entonces
        inicio
        avanza; norte; avanza; este; avanza; norte;
        fin;
    fin;
fin;
si junto-a-zumbador entonces junta;
fin;

  inicia-ejecucion
  si frente-bloqueado entonces
      inicio
      este; mientras izquierda-bloqueada hacer avanza; norte; avanza; oeste;
      mientras frente-libre hacer avanza;
      fin
  sino avanza;
  este; repetir 8 veces avanza; norte;

  repetir 8 veces
  inicio
      avanza;
      junta;
      sur; mientras frente-libre hacer avanza; si frente-bloqueado entonces
      inicio
      si derecha-bloqueada o izquierda-bloqueada entonces
          inicio
          si derecha-bloqueada entonces
              inicio
              este; avanza; sur;
              si frente-libre entonces
                  inicio
                  avanza; oeste; avanza; sur; mientras frente-libre hacer avanza;
                  fin
                  sino
                  inicio
                  oeste; avanza; sur;
                  fin;
              fin;
          si izquierda-bloqueada entonces
              inicio
              oeste; avanza; sur; avanza; este; avanza; sur; mientras frente-libre hacer avanza;
              fin;
          fin;
      fin;

          mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
      oeste; avanza; norte;
      fin;
 este;
 mientras no-junto-a-zumbador hacer avanza;
 mientras junto-a-zumbador hacer avanza; oeste; avanza;
cuenta(0);
MIENTRAS ALGUN-ZUMBADOR-EN-LA-MOCHILA HACER DEJA-ZUMBADOR;
        apagate;
    termina-ejecucion
finalizar-programa
