iniciar-programa
define-nueva-instruccion gira-derecha como repetir 3 veces gira-izquierda;
define-nueva-instruccion media-vuelta como repetir 2 veces gira-izquierda;

 define-nueva-instruccion cuenta(n) como inicio

  repetir 5000 veces inicio

  mientras no junto-a-zumbador y frente-libre hacer avanza;

  si frente-bloqueado  entonces inicio

                          si orientado-al-norte y frente-bloqueado y no-junto-a-zumbador entonces inicio
                               gira-derecha;
                              si frente-libre entonces inicio avanza;
                                  fin
                                   sino
                               inicio
                                   media-vuelta;
                                   mientras frente-libre hacer avanza;
                                   gira-izquierda;
                                   mientras frente-libre hacer avanza;
                                    gira-izquierda;
                                    avanza;
                                    repetir precede(n) veces inicio
                                    si algun-zumbador-en-la-mochila entonces deja-zumbador;
                                      si algun-zumbador-en-la-mochila entonces deja-zumbador;
                                    fin;
                                    media-vuelta;

                                   avanza;
                                   mientras algun-zumbador-en-la-mochila hacer deja-zumbador;

                                    gira-derecha;
                                     mientras junto-a-zumbador hacer coge-zumbador;
                                        mientras algun-zumbador-en-la-mochila hacer inicio
                                          si algun-zumbador-en-la-mochila entonces inicio
                                            deja-zumbador;
                                            si frente-libre entonces inicio
                                            avanza;
                                            fin
                                            sino
                                            inicio
                                              media-vuelta;
                                              mientras frente-libre hacer avanza;
                                              gira-izquierda;
                                              avanza;
                                              gira-izquierda;


                                           si junto-a-zumbador entonces inicio
                                            mientras junto-a-zumbador hacer coge-zumbador;
                                        mientras algun-zumbador-en-la-mochila hacer inicio
                                            deja-zumbador;
                                            si algun-zumbador-en-la-mochila entonces inicio
                                            deja-zumbador;
                                            fin
                                            sino
                                            inicio
                                            coge-zumbador;
                                            apagate;
                                            fin;
                                            si frente-libre entonces inicio
                                            avanza;
                                            fin
                                            sino
                                            inicio
                                             apagate;
                                            fin;
                                          fin;
                                       apagate;

                                          fin
                                          sino
                                          inicio
                                          apagate;
                                          fin;

                                            fin;
                                          fin;
                                       fin;



                                              media-vuelta;
                                              mientras frente-libre hacer avanza;
                                              gira-izquierda;
                                              avanza;
                                              gira-izquierda;



                                            mientras junto-a-zumbador hacer coge-zumbador;
                                        mientras algun-zumbador-en-la-mochila hacer inicio
                                            deja-zumbador;
                                            deja-zumbador;
                                            si frente-libre entonces inicio
                                            avanza;
                                            fin
                                            sino
                                            inicio
                                             apagate;
                                            fin;

                                          fin;
                                       apagate;




                                   (*q cuente los 2*)

                                fin;
                               gira-derecha;
                              fin;


                           si orientado-al-sur y frente-bloqueado y no junto-a-zumbador entonces inicio
                               gira-izquierda;
                               si frente-libre entonces inicio avanza;
                                  fin
                                   sino
                               inicio
                                   media-vuelta;
                                   mientras frente-libre hacer avanza;
                                   media-vuelta;
                                   avanza;
                                   repetir n veces inicio
                                   deja-zumbador;
                                   deja-zumbador;
                                   fin;
                                   media-vuelta;
                                   avanza;
                                   mientras algun-zumbador-en-la-mochila hacer deja-zumbador;

                                    gira-derecha;
                                     mientras junto-a-zumbador hacer coge-zumbador;
                                        mientras algun-zumbador-en-la-mochila y no-junto-a-zumbador hacer inicio
                                          si algun-zumbador-en-la-mochila entonces inicio
                                            deja-zumbador;
                                            si frente-libre entonces avanza;
                                          fin;
                                       fin;



                                              media-vuelta;
                                              mientras frente-libre hacer avanza;
                                              gira-izquierda;
                                              avanza;
                                              gira-izquierda;



                                            mientras junto-a-zumbador hacer coge-zumbador;
                                        mientras algun-zumbador-en-la-mochila y no-junto-a-zumbador hacer inicio
                                            deja-zumbador;
                                            deja-zumbador;
                                            si frente-libre entonces avanza;



                                          fin;
                                       apagate;
                                   (*q cuente los 2*)

                               fin;
                               gira-izquierda;
                          fin;

                      fin;

    mientras junto-a-zumbador hacer inicio
     mientras junto-a-zumbador hacer coge-zumbador;
     cuenta(sucede(n))
    fin;

 fin;

fin;

 inicia-ejecucion

si no-orientado-al-norte entonces inicio
            si orientado-al-este entonces gira-izquierda;
            si orientado-al-oeste entonces gira-derecha;
            si orientado-al-sur entonces media-vuelta;
     fin;


            repetir 5000 veces inicio

                     mientras frente-libre y no junto-a-zumbador hacer avanza;

                       si frente-bloqueado  entonces inicio

                           si orientado-al-norte y frente-bloqueado entonces inicio
                               gira-derecha;
                                 si junto-a-zumbador entonces inicio
                                   si junto-a-zumbador entonces inicio
                                     coge-zumbador;
                                      si junto-a-zumbador entonces deja-zumbador;

                                   fin;
                                  fin;
                               si frente-libre entonces inicio avanza;
                                  fin
                                   sino
                               inicio
                                   media-vuelta;
                                   mientras frente-libre hacer avanza;
                                   gira-izquierda;
                                   mientras frente-libre hacer avanza;
                                    media-vuelta;
                                   cuenta(1);

                                   (*q cuente los 2*)

                               fin;
                               gira-derecha;
                           fin;


                           si orientado-al-sur y frente-bloqueado y no-junto-a-zumbador entonces inicio
                               gira-izquierda;
                               si frente-libre entonces inicio avanza;
                                  fin
                                   sino
                               inicio
                                   media-vuelta;
                                   mientras frente-libre hacer avanza;
                                   gira-derecha;
                                           cuenta(0);
                                   (*q cuente los 2*)

                               fin;
                               gira-izquierda;
                          fin;

                      fin;

        MIENTRAS junto-a-zumbador HACER  inicio

                              coge-zumbador;

                              si junto-a-zumbador entonces inicio
                                     deja-zumbador;
                                     si frente-libre entonces avanza;
                                     si frente-bloqueado y no-junto-a-zumbador entonces inicio
                                       si orientado-al-norte y frente-bloqueado entonces inicio
                                       gira-derecha;
                                       avanza;
                                       gira-derecha;
                                       fin;

                                       si orientado-al-sur y frente-bloqueado entonces inicio
                                           gira-izquierda;
                                           si frente-libre entonces inicio
                                               avanza;
                                                gira-izquierda;
                                           fin
                                           sino
                                           inicio
                                           media-vuelta;
                                   mientras frente-libre hacer avanza;
                                   gira-derecha;
                                           cuenta(0);
                                   (*q cuente los 2*)

                               fin;
                                        fin;
                                     fin;
                                    fin;
                               si frente-bloqueado y junto-a-zumbador y  orientado-al-sur y izquierda-bloqueada entonces inicio
                                gira-derecha;
                                mientras frente-libre hacer avanza;
                                gira-derecha;
                                cuenta(0);
                               fin;

                              si frente-bloqueado y junto-a-zumbador y  orientado-al-sur y izquierda-libre entonces inicio
                                gira-izquierda;
                                si frente-libre entonces avanza;
                                gira-izquierda;

                               fin;


                        fin;

fin;
      apagate;
    termina-ejecucion
finalizar-programa
