iniciar-programa

    define-nueva-instruccion gira-derecha como inicio
        gira-izquierda;
        gira-izquierda;
        gira-izquierda;
    fin;
    define-nueva-instruccion regresar como inicio
        gira-izquierda;
        gira-izquierda;
    fin;

    (*Mueve a nueva Posicion *)
    define-nueva-instruccion Move(n) como inicio

        si si-es-cero(precede(n))  entonces inicio
                mientras no-orientado-al-norte hacer inicio
                    gira-izquierda;
                fin;
                si frente-libre entonces inicio
                    avanza;
                fin;
            fin;
        si si-es-cero(precede(precede(n))) entonces inicio
                mientras no-orientado-al-este hacer inicio
                    gira-izquierda;
                fin;
                si frente-libre entonces inicio
                    avanza;
                fin;
            fin;
        si si-es-cero(precede(precede(precede(n)))) entonces inicio
                mientras no-orientado-al-sur hacer inicio
                    gira-izquierda;
                fin;
                si frente-libre entonces inicio
                    avanza;
                fin;
            fin;
        si si-es-cero(precede(precede(precede(precede(n))))) entonces inicio
                mientras no-orientado-al-oeste hacer inicio
                    gira-izquierda;
                fin;
                si frente-libre entonces inicio
                    avanza;
                fin;
            fin;

     fin;

     (*Recursivo, Cuenta zumbadores por celda y ejecuta MOVE *)
     define-nueva-instruccion cuenta(n) como inicio
         si junto-a-zumbador entonces inicio
             coge-zumbador;
             cuenta(sucede(n));

         fin sino inicio
             mientras algun-zumbador-en-la-mochila hacer inicio
                 deja-zumbador;
             fin;
             si frente-libre entonces inicio
                 avanza;
                 si junto-a-zumbador entonces inicio
                     cuenta(0);
                     si no si-es-cero(n) entonces inicio
                         (* Mueve Valor del resto de Celdas *)
                         Move(n);
                     fin;
                 fin;
             fin sino inicio
                 si no si-es-cero(n) entonces inicio
                    (* Mueve Valor Primer Celda *)
                    Move(n);
                 fin;
             fin;
         fin;
     fin;

    inicia-ejecucion
        (*empieza por ultima celda *)
        mientras junto-a-zumbador y frente-libre hacer inicio
            Avanza;
        fin;
        regresar; (* Oeste *)
        si no junto-a-zumbador entonces inicio
            Avanza;
        fin;

        (*Cuenta desde Ultima Celda a Primera *)
        (*y por recursividad empieza a mover zumbador de valor de celda uno*)
        cuenta(0);

        apagate;
    termina-ejecucion
finalizar-programa
