iniciar-programa
define-prototipo-instruccion primeraFila(k);
define-nueva-instruccion gira(e) como repetir e veces gira-izquierda;
define-nueva-instruccion orientate como inicio
     mientras no orientado-al-oeste hacer gira-izquierda;
  mientras frente-libre hacer avanza;
  gira(1);
  mientras frente-libre hacer avanza;
  gira(1);
fin;
   define-nueva-instruccion busqueda como inicio
      mientras frente-libre y no junto-a-zumbador hacer avanza;
      si no junto-a-zumbador entonces inicio
      mientras no orientado-al-oeste hacer gira-izquierda;
  mientras frente-libre hacer avanza;
       gira(3);
       si frente-libre entonces avanza;
       gira(3);
      fin;
   fin;
   define-nueva-instruccion regresa como inicio
        gira(1);
         si frente-libre entonces inicio
         avanza;
         gira(1);
       si frente-libre entonces  avanza;
       si frente-libre entonces avanza;
         gira(2);
         mientras no junto-a-zumbador y frente-libre hacer avanza;
         coge-zumbador;
       si frente-libre entonces  avanza;
   fin;
   fin;
   define-nueva-instruccion checaNorte(k) como inicio
        si junto-a-zumbador  entonces inicio
           regresa;
          primeraFila(sucede(k));
         fin
         sino inicio
         regresa;
            PrimeraFila(k);
        fin;
   fin;
   define-nueva-instruccion checaMedio(k) como inicio
       si junto-a-zumbador y frente-libre entonces inicio
          avanza;
          checaNorte(sucede(k));
        fin sino inicio
         si frente-libre entonces inicio
            avanza;
            checaNorte(k);
         fin sino inicio
         regresa;
         primeraFila(sucede(k));
         fin;

       fin;

   fin;
    define-nueva-instruccion checaSur(k) como inicio
        si junto-a-zumbador y frente-libre entonces inicio
          avanza;
          checaMedio(sucede(k));
        fin sino inicio
         si frente-libre entonces inicio
            avanza;
            checaMedio(k);
         fin;
        fin;
    fin;
    define-nueva-instruccion lol(k) como  inicio
         gira(2);
       si frente-libre entonces      avanza;
         gira(1); avanza;
          gira(1);
          checaSur(k);
    fin;
   define-nueva-instruccion checaSiguienteColumna(k)  como inicio
       gira(2);
       si frente-libre entonces avanza;
       si frente-libre entonces inicio
         avanza;
         gira(1); avanza;
          gira(1);
          checaSur(k);
       fin sino inicio
        gira(1);
        avanza; gira(1);
        checaMedio(k);
      fin;
   fin;
      define-nueva-instruccion checaArriba(k) como inicio
          si frente-libre entonces inicio
              avanza;
               si junto-a-zumbador entonces checaSiguienteColumna(sucede(k)) sino checaSiguienteColumna(k);
          fin sino inicio
              si junto-a-zumbador entonces lol(k);
          fin;
      fin;
      define-nueva-instruccion multiplica(k) como  inicio

         si junto-a-zumbador y frente-libre entonces inicio
         si frente-libre entonces    avanza;
           multiplica(k);
         fin sino      inicio
         si junto-a-zumbador entonces inicio
            orientate;
         fin    sino inicio
            orientate;
            sal-de-instruccion;
          fin;
       fin;
         repetir k veces deja-zumbador;
      fin;
   define-nueva-instruccion primeraFila(k) como inicio
 si junto-a-zumbador entonces     checaArriba(k) sino inicio
   orientate;
  mientras no junto-a-zumbador hacer busqueda;
   multiplica(k);
 fin;
   fin;
   define-nueva-instruccion funcion(k) como inicio
     si frente-libre entonces inicio
         avanza;
         si junto-a-zumbador entonces funcion(sucede(k)) sino inicio
            orientate;
            repetir k veces deja-zumbador;
         fin
         fin
      sino inicio
        orientate;
        repetir k veces deja-zumbador;
     fin;
   fin;
    inicia-ejecucion
    orientate;
  mientras no junto-a-zumbador hacer  busqueda;
   gira(1);
    primeraFila(0);
    avanza;
      mientras no-junto-a-zumbador hacer     busqueda;
      mientras junto-a-zumbador y frente-libre hacer avanza;
      si junto-a-zumbador y frente-bloqueado entonces  inicio
      gira(1);
      funcion(0)
      fin sino inicio
        si no junto-a-zumbador entonces inicio
            gira(2); avanza;
            gira(3);
            funcion(0);
        fin;
      fin;
        apagate;
    termina-ejecucion
finalizar-programa
