iniciar-programa
    define-nueva-instruccion gira(g) como inicio
       repetir g veces gira-izquierda;
    fin;
    define-nueva-instruccion mediavuelta como inicio
       gira(2);
       avanza;
       gira(2);
    fin;
    define-nueva-instruccion recorriendo2(r) como inicio
       si junto-a-zumbador entonces inicio
          coge-zumbador;
          si junto-a-zumbador entonces inicio
             mientras junto-a-zumbador hacer inicio
                coge-zumbador;
             fin;
             recorriendo2(sucede(r));
          fin sino inicio
          recorriendo2(r);
          fin;
       fin sino inicio
          si frente-libre entonces inicio
             avanza;
             si junto-a-zumbador entonces inicio
                recorriendo2(r);
             fin sino inicio
                mediavuelta;
             fin;
          fin;
          si (izquierda-libre o derecha-libre) y no-junto-a-zumbador entonces inicio
             gira-izquierda;
             si frente-libre entonces inicio
                avanza;
                si junto-a-zumbador entonces inicio
                   recorriendo2(r);
                fin sino inicio
                mediavuelta;
                fin;
             fin;
             si no-junto-a-zumbador entonces inicio
                gira(2);
                si frente-libre entonces inicio
                   avanza;
                   si junto-a-zumbador entonces inicio
                      recorriendo2(r);
                   fin sino inicio
                      mediavuelta;
                   fin;
                fin;
                si no-junto-a-zumbador entonces inicio
                   repetir r veces deja-zumbador;
                fin;
             fin;
          fin;
       fin;
    fin;
    define-nueva-instruccion recorriendo(r) como inicio
       si junto-a-zumbador entonces inicio
          coge-zumbador;
          si junto-a-zumbador entonces inicio
             mientras junto-a-zumbador hacer inicio
                coge-zumbador;
             fin;
             si si-es-cero(r) entonces inicio
                recorriendo2(1);
             fin sino inicio
                recorriendo(precede(r));
             fin;
          fin sino inicio
             recorriendo(r);
          fin;
       fin sino inicio
          si frente-libre entonces inicio
             avanza;
             si junto-a-zumbador entonces inicio
                recorriendo(r);
             fin sino inicio
                mediavuelta;
             fin;
          fin;
          si (izquierda-libre o derecha-libre) y no-junto-a-zumbador entonces inicio
             gira-izquierda;
             si frente-libre entonces inicio
                avanza;
                si junto-a-zumbador entonces inicio
                   recorriendo(r);
                fin sino inicio
                   mediavuelta;
                fin;
             fin;
             si no-junto-a-zumbador entonces inicio
                gira(2);
                si frente-libre entonces inicio
                   avanza;
                   si junto-a-zumbador entonces inicio
                      recorriendo(r);
                   fin sino inicio
                      gira(2);
                      avanza;
                      mientras no-orientado-al-este hacer inicio
                         gira-izquierda;
                      fin;
                      avanza;
                      repetir 5 veces deja-zumbador;
                   fin;
                fin;
             fin;
          fin;
       fin;
    fin;
    define-nueva-instruccion lugares(l) como inicio
       si junto-a-zumbador entonces inicio
          coge-zumbador;
          lugares(sucede(l));
       fin sino inicio
          recorriendo(l);
       fin;
    fin;
    inicia-ejecucion
        lugares(0);
        apagate;
    termina-ejecucion
finalizar-programa
