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;
    este;
  fin;

define-nueva-instruccion cambiolinea como
  inicio
    oeste;
    mientras frente-libre hacer avanza;
    norte;
    si frente-libre entonces
      inicio
       avanza;
       este;
      fin;
  fin;

define-nueva-instruccion siguiente como
  inicio
    mientras derecha-libre hacer gira-izquierda;
    si frente-libre entonces avanza sino
      inicio
        gira-izquierda;
        avanza;
      fin;
    mientras no junto-a-zumbador hacer
      inicio
         si frente-libre entonces avanza sino
      inicio
        gira-izquierda;
        avanza;
      fin;
      fin;
  fin;

define-nueva-instruccion bloques(x) como
  inicio
    si junto-a-zumbador entonces
      inicio
        coge-zumbador;
        bloques(sucede(x));
      fin
    sino
      inicio
        repetir x veces siguiente;
      fin;
  fin;

define-nueva-instruccion contar(n) como
  inicio
    si orientado-al-este entonces
      inicio
        si junto-a-zumbador entonces
          inicio
            si frente-libre entonces avanza sino cambiolinea;
            contar(sucede(n));
          fin
        sino
          inicio
            si frente-libre entonces avanza sino cambiolinea;
            contar(n);
          fin;
      fin
    sino
      inicio
       ir11;
       repetir precede(n) veces bloques(0);
      fin;
  fin;

define-nueva-instruccion dejar como
  inicio
   si junto-a-zumbador entonces
     inicio
      coge-zumbador;
      dejar;
      deja-zumbador;
     fin
   sino
     inicio
       ir11; 
     fin;
  fin;
    inicia-ejecucion
          ir11;
          contar(0);
          dejar;
        apagate;
    termina-ejecucion
finalizar-programa
