iniciar-programa
 Define-nueva-instruccion mv como
  inicio
   repetir 2 veces
    gira-izquierda;
  fin;
 Define-nueva-instruccion gd como
  inicio
   repetir 3 veces
    gira-izquierda;
  fin;
 Define-nueva-instruccion baja como
  inicio
   gd;
   mientras frente-libre hacer
    avanza;
   gira-izquierda;
  fin;
 Define-nueva-instruccion regresa(n) como
  inicio
   si no si-es-cero(n) entonces
    inicio
     si frente-libre entonces
      inicio
       avanza;
       regresa(precede(precede(n)));
      fin
     sino
      inicio
       gd;
       mientras izquierda-bloqueada hacer
        avanza;
       gira-izquierda;
       avanza;
       gira-izquierda;
       mientras frente-libre hacer
        avanza;
       gd;
       regresa(precede(precede(n)));
      fin;
    fin;
  fin;
 Define-nueva-instruccion ida(n) como
  inicio
   si no(orientado-al-norte y frente-bloqueado y derecha-bloqueada) entonces
    inicio
     si derecha-libre y orientado-al-norte entonces
      gd;
     si frente-libre y orientado-al-este entonces
      inicio
       avanza;
       si derecha-libre entonces
        baja;
       ida(sucede(n));
      fin
     sino
      inicio
       gira-izquierda;
       mientras derecha-bloqueada y frente-libre hacer
        avanza;
       ida(n);
      fin;
    fin
   sino
    inicio
     mv;
     mientras frente-libre hacer
      avanza;
     gd;

     regresa(n);
    fin;
  fin;

    inicia-ejecucion
     mientras no-orientado-al-este hacer
      gira-izquierda;
     Ida(0);
        apagate;
    termina-ejecucion
finalizar-programa
