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 arriba como
  inicio
   norte;
   si frente-libre entonces avanza;
  fin;

define-nueva-instruccion ir11 como
  inicio
   sur;
   mientras frente-libre hacer avanza;
   oeste;
   mientras frente-libre hacer avanza;
   este;
  fin;

define-nueva-instruccion ubicar1 como
  inicio
   repetir 26 veces si frente-libre entonces avanza;
   oeste;
   mientras no-junto-a-zumbador y frente-libre hacer avanza;
   este;
   si frente-libre entonces avanza;
   oeste;
  fin;

define-nueva-instruccion llena(n) como
  inicio
    si no si-es-cero(n) entonces
      inicio
        si no si-es-cero (precede(n)) entonces
        inicio
         repetir precede(precede(n)) veces
           inicio
            avanza;
            si algun-zumbador-en-la-mochila entonces
              inicio
               si no-junto-a-zumbador entonces deja-zumbador;
              fin;
           fin;
         si no si-es-cero(precede(precede(precede(n)))) entonces
           inicio
            si orientado-al-este entonces
              inicio
               arriba;
               oeste;
              fin
            sino
              inicio
               si orientado-al-oeste entonces
                 inicio
                  arriba;
                  este;
                 fin;
              fin;
           fin;
          llena(precede(precede(n)));
        fin;
       fin;
      fin;

define-nueva-instruccion rellenar(n) como
  inicio
   si frente-libre entonces
     inicio
      avanza;
      si no-junto-a-zumbador entonces deja-zumbador;
      rellenar(sucede(n));
     fin
   sino
     inicio
      arriba;
      este;
      llena(n);
     fin;
  fin;

define-nueva-instruccion ubicar2 como
  inicio
   ir11;
   mientras junto-a-zumbador y frente-libre hacer avanza;
   deja-zumbador;
   avanza;
   oeste;
   rellenar(0);
  fin;

    inicia-ejecucion
    este;
    ubicar1;
    rellenar(0);
    mientras algun-zumbador-en-la-mochila hacer
      inicio
       ubicar2;
      fin;

        apagate;
    termina-ejecucion
finalizar-programa
