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 regresa como inicio
        media-vuelta;
        avanza;
        media-vuelta;
    fin;
    define-nueva-instruccion checa(x) como
        si no si-es-cero(x) entonces inicio
            si junto-a-zumbador entonces inicio
                coge-zumbador;
                checa(precede(x));
                si junto-a-zumbador entonces
                    deja-zumbador;
            fin
            sino inicio
                checa(precede(x));
            fin;
        fin;
    define-nueva-instruccion ciudad(x) como

        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 orientado-al-norte entonces inicio
                            gira-derecha;
                            avanza;
                            checa(x);
                            si no-junto-a-zumbador entonces
                               repetir x veces
                                    deja-zumbador;
                            media-vuelta;
                            avanza;
                            mientras no-orientado-al-norte hacer
                                gira-izquierda;
                        fin;
                        si orientado-al-este entonces inicio
                            avanza;
                            checa(x);
                            si no-junto-a-zumbador entonces
                                repetir x veces
                                    deja-zumbador;
                            media-vuelta;
                            avanza;
                            mientras no-orientado-al-este hacer
                                gira-izquierda;
                        fin;
                        si orientado-al-sur entonces inicio
                            gira-izquierda;
                            avanza;
                            checa(x);
                            si no-junto-a-zumbador entonces
                                repetir x veces
                                    deja-zumbador;
                            media-vuelta;
                            avanza;
                            mientras no-orientado-al-sur hacer
                                gira-izquierda;
                        fin;
                        repetir 3 veces
                            deja-zumbador;
                fin
                sino inicio
                    gira-izquierda;
                    repetir 3 veces inicio
                        si frente-libre entonces inicio
                            avanza;
                            si no si-es-cero(x) entonces
                            ciudad(precede(x));
                            regresa;
                        fin;
                        gira-derecha;
                    fin;
                    media-vuelta;
                    repetir 2 veces
                        deja-zumbador;
               fin;
           fin
           sino
               si frente-libre entonces inicio
                   avanza;
                   si no-junto-a-zumbador entonces inicio
                       regresa;
                       deja-zumbador;
                       si derecha-libre entonces inicio
                           coge-zumbador;
                           gira-derecha;
                           avanza;
                           si no-junto-a-zumbador entonces inicio
                               media-vuelta;
                               avanza;
                               gira-derecha;
                               deja-zumbador;
                               si izquierda-libre entonces inicio
                                   coge-zumbador;
                                   gira-izquierda;
                                   avanza;
                                   si no-junto-a-zumbador entonces inicio
                                       media-vuelta;
                                       avanza;
                                       gira-izquierda;
                                       deja-zumbador;
                                   fin
                                   sino inicio
                                       ciudad(x);
                                       regresa;
                                       deja-zumbador;
                                       gira-derecha;
                                   fin;
                               fin;
                           fin
                           sino inicio
                               ciudad(x);
                               regresa;
                               deja-zumbador;
                               gira-izquierda;
                           fin;
                       fin
                       sino
                            si izquierda-libre entonces inicio
                                   coge-zumbador;
                                   gira-izquierda;
                                   avanza;
                                   si no-junto-a-zumbador entonces inicio
                                       media-vuelta;
                                       avanza;
                                       gira-izquierda;
                                       deja-zumbador;
                                   fin
                                   sino inicio
                                       ciudad(x);
                                       regresa;
                                       deja-zumbador;
                                       gira-derecha;
                                   fin;
                               fin;
                   fin
                   sino inicio
                       ciudad(x);
                       regresa;
                       deja-zumbador;
                   fin;

               fin
               sino inicio
                   deja-zumbador;
                   si derecha-libre entonces inicio
                       coge-zumbador;
                       gira-derecha;
                       avanza;
                       si no-junto-a-zumbador entonces inicio
                           media-vuelta;
                           avanza;
                           gira-derecha;
                           deja-zumbador;
                           si izquierda-libre entonces inicio
                               coge-zumbador;
                               gira-izquierda;
                               avanza;
                               si no-junto-a-zumbador entonces inicio
                                   media-vuelta;
                                   avanza;
                                   gira-izquierda;
                                   deja-zumbador;
                               fin
                               sino inicio
                                   ciudad(x);
                                   regresa;
                                   deja-zumbador;
                                   gira-derecha;
                               fin;
                           fin
                       fin
                       sino inicio
                           ciudad(x);
                           regresa;
                           deja-zumbador;
                           gira-izquierda;
                       fin;
                   fin
                   sino
                       si izquierda-libre entonces inicio
                           coge-zumbador;
                           gira-izquierda;
                           avanza;
                           si no-junto-a-zumbador entonces inicio
                               media-vuelta;
                               avanza;
                               gira-izquierda;
                               deja-zumbador;
                           fin
                           sino inicio
                               ciudad(x);
                               regresa;
                               deja-zumbador;
                               gira-derecha;
                           fin;
                       fin;
              fin;
          fin;
    define-nueva-instruccion cuenta(x) como
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            cuenta(sucede(x));
        fin
        sino inicio
            deja-zumbador;
            ciudad(precede(x));
        fin;
    inicia-ejecucion
        cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
