iniciar-programa
define-nueva-instruccion gira(n) como inicio
   repetir n veces gira-izquierda;
   fin;
define-nueva-instruccion acomoda(n) como inicio
   si si-es-cero(n) entonces inicio
      si izquierda-libre entonces inicio
         gira(1);
         mientras frente-libre hacer avanza;
         gira(3);
         apagate;
         fin;
       apagate;
       fin;
   si frente-bloqueado y derecha-libre entonces inicio
      gira(3);
      mientras izquierda-bloqueada y frente-libre hacer avanza;
      gira(1);
      fin;
   si frente-bloqueado y izquierda-libre entonces inicio
      gira(1);
      mientras derecha-bloqueada y frente-libre hacer avanza;
      gira(3);
      fin;
   si frente-libre entonces inicio
      avanza;
      acomoda(precede(n));
      fin;
   fin;
define-nueva-instruccion mitad(n) como inicio
   si izquierda-libre y frente-bloqueado entonces inicio
      gira(1);
      mientras derecha-bloqueada y frente-libre hacer avanza;
      gira(3);
      fin;
   si derecha-libre y frente-bloqueado entonces inicio
      gira(3);
      mientras izquierda-bloqueada y frente-libre hacer avanza;
      gira(1);
      fin;
   si frente-libre entonces inicio
      avanza;
      si izquierda-libre y frente-bloqueado entonces inicio
         gira(1);
         mientras derecha-bloqueada y frente-libre hacer avanza;
         gira(3);
         fin;
      si derecha-libre y frente-bloqueado entonces inicio
         gira(3);
         mientras izquierda-bloqueada y frente-libre hacer avanza;
         gira(1);
         fin;
      avanza;
      mitad(sucede(n));
      fin;
   gira(2);
   acomoda(n);
   fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer gira-izquierda;
    mitad(0);
        apagate;
    termina-ejecucion
finalizar-programa
