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 ir11 como
  inicio
    sur;
    mientras frente-libre hacer avanza;
    oeste;
    mientras frente-libre hacer avanza;
  fin;

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


define-nueva-instruccion columna(n) como
  inicio
    si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        columna(sucede(n));
      fin
    sino
      inicio
       mientras frente-libre hacer avanza;
       norte;
       avanza;
       este;
       repetir precede (n) veces avanza;
      fin;
  fin;

 define-nueva-instruccion ancho(n) como
   inicio
     si junto-a-zumbador entonces
       inicio
         coge-zumbador;
         ancho(sucede(n));
       fin
     sino
       inicio
         oeste;
         avanza;
         mientras junto-a-zumbador hacer coge-zumbador;
         avanza;
         columna(0);
         repetir n veces
           inicio
            deja-zumbador;
            si frente-libre entonces avanza;
           fin;
       fin;
   fin;

define-nueva-instruccion contarder(n) como
  inicio
    si frente-libre entonces
      inicio
        avanza;
        contarder(sucede(n));
      fin
    sino
      inicio
       ir11;
       este;
       avanza;
       repetir n veces deja-zumbador;
      fin;
  fin;

define-nueva-instruccion contarizq(n) como
  inicio
    si frente-libre entonces
      inicio
        avanza;
        contarizq(sucede(n));
      fin
    sino
      inicio
       ir11;
       repetir n veces deja-zumbador;
      fin;
  fin;

define-nueva-instruccion dejar(n) como
  inicio
   si no si-es-cero (n) y junto-a-zumbador entonces
     inicio
      coge-zumbador;
      dejar(precede(n));
      deja-zumbador;
     fin
   sino
     inicio
       si junto-a-zumbador entonces
         inicio
           mientras junto-a-zumbador hacer coge-zumbador;
         fin;
     fin;
  fin;

define-nueva-instruccion contar(n) como
  inicio
   si junto-a-zumbador entonces
     inicio
       coge-zumbador;
       contar(sucede(n));
     fin
   sino
     inicio
       este;
       avanza;
       repetir n veces si junto-a-zumbador entonces coge-zumbador
       sino
        inicio
         oeste;
         sal-de-instruccion;
        fin;
       si junto-a-zumbador entonces
         inicio

         fin
       sino
         inicio
          oeste;
         fin;
     fin;
  fin;

define-nueva-instruccion contar2(n) como
  inicio
    si frente-libre entonces
      inicio
        avanza;
        contar2(sucede(n));
      fin
    sino
      inicio
        irafuera;
        repetir sucede (n) veces deja-zumbador;
      fin;
  fin;

    inicia-ejecucion
         este;
         repetir 3 veces avanza;
         ancho(0);
         si frente-bloqueado o no junto-a-zumbador entonces
           inicio
            oeste;
            avanza;
            este;
           fin;
         contarder(0);
         ir11;
         norte;
         avanza;
         este;
         mientras no junto-a-zumbador hacer avanza;
         oeste;
         contarizq(0);
         contar(0);
         si orientado-al-oeste entonces
           inicio
            irafuera;
            deja-zumbador;
           fin
         sino
           inicio
             ir11;
             norte;
             avanza;
             este;
             contar2(0);
           fin;
        apagate;
    termina-ejecucion
finalizar-programa
 