iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;

define-nueva-instruccion mayor(n) como inicio
    si no si-es-cero (n) entonces   inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            mayor(precede(n));
            deja-zumbador;
        fin sino inicio
            repetir n veces  inicio
               deja-zumbador;
            fin;
        fin;
    fin;
  fin;

define-nueva-instruccion comparar(n) como inicio
    mayor(n);
fin;

    define-nueva-instruccion retrocede como inicio
          repetir 2 veces gira-izquierda;
          avanza;
          repetir 2 veces gira-izquierda;
    fin;


    define-nueva-instruccion CaminaDer como inicio
       (*busco a la derecha*)
       gira-izquierda;
       gira-izquierda;
       avanza;
    fin;


    define-nueva-instruccion CaminaIzq como inicio
       (*busco a la izquierda*)
       gira-izquierda;
       si frente-libre entonces inicio
          avanza;
          si no junto-a-zumbador entonces inicio
            retrocede;
            caminaDer;
          fin;
       fin sino inicio
          caminaDer
       fin;
    fin;

    define-nueva-instruccion camina como inicio
       si frente-libre entonces inicio
          avanza;
          si no-junto-a-zumbador entonces inicio
             retrocede;
             CaminaIzq;
          fin;
       fin sino inicio
          caminaIZQ
       fin
    fin;


    define-nueva-instruccion sigCiudad como inicio
        si junto-a-zumbador entonces inicio
           coge-zumbador;
           si junto-a-zumbador entonces inicio
               deja-zumbador
           fin sino inicio
               deja-zumbador;
               camina;
               sigCiudad;
           fin;
        fin
    fin;

define-nueva-instruccion pon(n) como   inicio
     mientras junto-a-zumbador hacer coge-zumbador;
     repetir n veces deja-zumbador;
fin;



define-nueva-instruccion resultado(n) como inicio
   si orientado-al-este entonces inicio
      avanza;
      comparar(n);
      retrocede;
   fin;
   si orientado-al-sur entonces inicio
      este;
      avanza;
      comparar(n);
      retrocede;
      sur;
   fin;
   si orientado-al-norte entonces inicio
      este;
      avanza;
      comparar(n);
      retrocede;
      norte;
   fin;
fin;

define-nueva-instruccion regresar como  inicio
    repetir 2 veces gira-izquierda;
    avanza;
    sigCiudad;
    repetir 2 veces gira-izquierda;
fin;




define-nueva-instruccion autobus(n) como inicio
     repetir 2 veces inicio
        coge-zumbador;
     fin;

     si junto-a-zumbador entonces inicio
         coge-zumbador;
         si junto-a-zumbador entonces inicio
             repetir 3 veces inicio
                 deja-zumbador;
             fin;
         fin sino inicio
             pon(3);
             resultado(n);
         fin;
     fin sino inicio
       si no si-es-cero(n) entonces inicio
         pon(4);
         si frente-libre entonces inicio   (*frente*)
              avanza;
              si no junto-a-zumbador entonces inicio
                 retrocede
              fin sino inicio
                  sigciudad;
                  autobus(precede(n));
                  regresar;
              fin;
         fin;
         gira-izquierda;  (* izquierda *)
         si frente-libre entonces inicio
              avanza;
              si no junto-a-zumbador entonces inicio
                 retrocede
              fin sino inicio
                  sigciudad;
                  autobus(precede(n));
                  regresar;
              fin;
         fin;
         repetir 2 veces gira-izquierda;  (*derecha*)
         si frente-libre entonces inicio
              avanza;
              si no junto-a-zumbador entonces inicio
                 retrocede
              fin sino inicio
                  sigciudad;
                  autobus(precede(n));
                  regresar;
              fin;
         fin;
         pon(2);   (*desmarca* y coloca a karel para regresar*)
         gira-izquierda;
       fin sino inicio (*cunado el parametro es cero= se agotaron los viajes*)
         pon(2);   (*desmarca* y coloca a karel para regresar*)
       fin;
     fin;
   fin;
 
 
 
define-nueva-instruccion contar(n) como
   inicio
     si junto-a-zumbador entonces
       inicio
         coge-zumbador;
         contar(sucede(n));
       fin sino
         inicio
          deja-zumbador;
          deja-zumbador;
          autobus(n);
         fin;
    fin;
 
    inicia-ejecucion
        contar(0);
        apagate;
    termina-ejecucion
finalizar-programa
