iniciar-programa

    define-nueva-instruccion cogeN(cuantos) como

        repetir cuantos veces coge-zumbador;



    define-nueva-instruccion dejaN(cuantos) como

        repetir cuantos veces deja-zumbador;



    define-nueva-instruccion buscaSalida(cambiosRestantes) como inicio

        si no-junto-a-zumbador y si-es-cero(cambiosRestantes) entonces

            apagate;



        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

                            dejaN(4);

                        fin

                        sino inicio

                            dejaN(5);



                            mientras no-orientado-al-oeste hacer gira-izquierda;

                            si frente-libre entonces inicio

                                avanza;

                                buscaSalida(cambiosRestantes);

                                mientras no-orientado-al-este hacer gira-izquierda;

                                avanza;

                            fin;



                            si no si-es-cero(cambiosRestantes) entonces inicio

                                mientras no-orientado-al-este hacer gira-izquierda;

                                si frente-libre entonces inicio

                                    avanza;

                                    buscaSalida(precede(cambiosRestantes));

                                    mientras no-orientado-al-oeste hacer gira-izquierda;

                                    avanza;

                                fin;



                                mientras no-orientado-al-norte hacer gira-izquierda;

                                si frente-libre entonces inicio

                                    avanza;

                                    buscaSalida(precede(cambiosRestantes));

                                    mientras no-orientado-al-sur hacer gira-izquierda;

                                    avanza;

                                fin;



                                mientras no-orientado-al-sur hacer gira-izquierda;

                                si frente-libre entonces inicio

                                    avanza;

                                    buscaSalida(precede(cambiosRestantes));

                                    mientras no-orientado-al-norte hacer gira-izquierda;

                                    avanza;

                                fin;

                            fin;



                            cogeN(1);

                        fin;

                    fin

                    sino inicio

                        dejaN(5);



                        mientras no-orientado-al-sur hacer gira-izquierda;

                        si frente-libre entonces inicio

                            avanza;

                            buscaSalida(cambiosRestantes);

                            mientras no-orientado-al-norte hacer gira-izquierda;

                            avanza;

                        fin;



                        si no si-es-cero(cambiosRestantes) entonces inicio

                            mientras no-orientado-al-este hacer gira-izquierda;

                            si frente-libre entonces inicio

                                avanza;

                                buscaSalida(precede(cambiosRestantes));

                                mientras no-orientado-al-oeste hacer gira-izquierda;

                                avanza;

                            fin;



                            mientras no-orientado-al-norte hacer gira-izquierda;

                            si frente-libre entonces inicio

                                avanza;

                                buscaSalida(precede(cambiosRestantes));

                                mientras no-orientado-al-sur hacer gira-izquierda;

                                avanza;

                            fin;



                            mientras no-orientado-al-oeste hacer gira-izquierda;

                            si frente-libre entonces inicio

                                avanza;

                                buscaSalida(precede(cambiosRestantes));

                                mientras no-orientado-al-este hacer gira-izquierda;

                                avanza;

                            fin;

                        fin;



                        cogeN(2);

                    fin;

                fin

                sino inicio

                    dejaN(5);



                    mientras no-orientado-al-este hacer gira-izquierda;

                    si frente-libre entonces inicio

                        avanza;

                        buscaSalida(cambiosRestantes);

                        mientras no-orientado-al-oeste hacer gira-izquierda;

                        avanza;

                    fin;



                    si no si-es-cero(cambiosRestantes) entonces inicio

                        mientras no-orientado-al-norte hacer gira-izquierda;

                        si frente-libre entonces inicio

                            avanza;

                            buscaSalida(precede(cambiosRestantes));

                            mientras no-orientado-al-sur hacer gira-izquierda;

                            avanza;

                        fin;



                        mientras no-orientado-al-sur hacer gira-izquierda;

                        si frente-libre entonces inicio

                            avanza;

                            buscaSalida(precede(cambiosRestantes));

                            mientras no-orientado-al-norte hacer gira-izquierda;

                            avanza;

                        fin;



                        mientras no-orientado-al-oeste hacer gira-izquierda;

                        si frente-libre entonces inicio

                            avanza;

                            buscaSalida(precede(cambiosRestantes));

                            mientras no-orientado-al-este hacer gira-izquierda;

                            avanza;

                        fin;

                    fin;



                    cogeN(3);

                fin;

            fin

            sino inicio

                dejaN(5);



                mientras no-orientado-al-norte hacer gira-izquierda;

                si frente-libre entonces inicio

                    avanza;

                    buscaSalida(cambiosRestantes);

                    mientras no-orientado-al-sur hacer gira-izquierda;

                    avanza;

                fin;



                si no si-es-cero(cambiosRestantes) entonces inicio

                    mientras no-orientado-al-este hacer gira-izquierda;

                    si frente-libre entonces inicio

                        avanza;

                        buscaSalida(precede(cambiosRestantes));

                        mientras no-orientado-al-oeste hacer gira-izquierda;

                        avanza;

                    fin;



                    mientras no-orientado-al-sur hacer gira-izquierda;

                    si frente-libre entonces inicio

                        avanza;

                        buscaSalida(precede(cambiosRestantes));

                        mientras no-orientado-al-norte hacer gira-izquierda;

                        avanza;

                    fin;



                    mientras no-orientado-al-oeste hacer gira-izquierda;

                    si frente-libre entonces inicio

                        avanza;

                        buscaSalida(precede(cambiosRestantes));

                        mientras no-orientado-al-este hacer gira-izquierda;

                        avanza;

                    fin;

                fin;



                cogeN(4);

            fin;

        fin;

    fin;



    define-nueva-instruccion arranca(cambios) como inicio

        si junto-a-zumbador entonces inicio

            coge-zumbador;

            arranca(sucede(cambios));

        fin

        sino inicio

            avanza;

            buscaSalida(cambios);

        fin;

    fin;



    inicia-ejecucion

        arranca(0);

        apagate;

    termina-ejecucion

finalizar-programa

 